﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using produccion.Conexion;
using Oracle.DataAccess.Client;
using System.Data;
using produccion.modelo;
using System.IO;
using System.Windows;
using System.Collections.ObjectModel;
using produccion.vistamodelo;
using produccion.clases;


namespace produccion.AccesoDatos
{

    class ProcesoProduccionRepositorio
    {
        public static string baseDatos;

        #region Procedimientos almacenados no reutilizables

        //Consulta lista de todos los procesos de produccion
        public DataTable consultarPP()
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);        

                var r1 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var pararametros = new List<OracleParameter> { r1 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_ConsultaPRCPRD", pararametros);
                return dt;
            }
            catch (Exception ex) { throw ex; }
        }

        //Consulta los procesos de produccion excluidos y no excluidos para un proceso
        public void consultarPPE(MprocesoProduccion proceso)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  
        
                var r1 = new OracleParameter("p_strCodigo", OracleDbType.Varchar2, proceso.strCodigo, ParameterDirection.Input);
                var r2 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var pararametros = new List<OracleParameter> { r1,r2 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_ConsultaPRCPRDExcluidos", pararametros);
                proceso.obsProcesosE.Clear();
                foreach (DataRow r in dt.Rows) 
                {
                    proceso.obsProcesosE.Add(new MprocesoProduccion.procesoExcluido
                    {
                        strCodigo=r["CODIGO"].ToString(),
                        strNombre=r["NOMBRE"].ToString(),
                        strExcluido=r["EXCLUIDO"].ToString()
                    });
                }
                MprocesoProduccion.procesoExcluido.logCambio = false;
            }
            catch (Exception ex) { throw ex; }
        }

        //Consulta un proceso de produccion especifico
        public DataSet consultarProceso(MprocesoProduccion proceso)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  
        
                var r1 = new OracleParameter("p_strCodigo", OracleDbType.Varchar2, proceso.strCodigo, ParameterDirection.Input);
                var r2 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var r3 = new OracleParameter("p_ResultSet2", OracleDbType.RefCursor, ParameterDirection.Output);
                var pararametros = new List<OracleParameter> { r1, r2,r3 };
                DataSet ds = oc.EjecutarSp<DataSet>("SP_ConsultaProcesoProduccion", pararametros);
                return ds;
            }
            catch (Exception ex) { throw ex; }
        }

        //Guardar proceso de produccion
        public Boolean guardar(MprocesoProduccion proceso)
        {
            try 
            {
                OracleConexion oc = new OracleConexion(baseDatos);  
        
                StringWriter swStringWriter = new StringWriter();
                DataTable dt = toolsUtiles.ToDataTable(proceso.obsProcesosE.ToList());
                dt.TableName = "t_ProcesoE";
                dt.WriteXml(swStringWriter);
                string xml = swStringWriter.ToString();

                var r1 = new OracleParameter("p_strCodigo", OracleDbType.Varchar2, proceso.strCodigo, ParameterDirection.Input);
                var r2 = new OracleParameter("p_strNombre", OracleDbType.Varchar2, proceso.strNombre, ParameterDirection.Input);
                var r3 = new OracleParameter("p_numValor", OracleDbType.Double, proceso.numValor, ParameterDirection.Input);
                var r4 = new OracleParameter("p_strEstado", OracleDbType.Varchar2, proceso.strEstado, ParameterDirection.Input);
                var r5 = new OracleParameter("p_strPreasignado", OracleDbType.Varchar2, proceso.strAsignado, ParameterDirection.Input);
                var r6 = new OracleParameter("t_ProcesoE", OracleDbType.XmlType, xml, ParameterDirection.Input);
                var r7 = new OracleParameter("p_strAceptaDevolucion", OracleDbType.Varchar2, proceso.strAceptaDevolucion, ParameterDirection.Input);
                var r8 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output);
                var pararametros = new List<OracleParameter> { r1, r2, r3,r4,r5,r6,r7,r8 };
                String str = oc.EjecutarSp<String>("SP_GrabarProcesoProduccion", pararametros);

                return Convert.ToInt32(r8.Value.ToString())==1?true:false;
            }
            catch (Exception ex) { throw ex; }
        }

        //Consulta los procesos de produccion para cargar el formaulario de reporte de procesos de produccion
        public void consultarRPP(ObservableCollection<MReporteProcProd.opcion> opciones)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  
       
                var r1 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var pararametros = new List<OracleParameter> { r1 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_ConsultaProcProd", pararametros);

                opciones.Clear();
                foreach (DataRow r in dt.Rows)
                {
                    opciones.Add(new MReporteProcProd.opcion
                    {
                        strCodigo = r["CODIGO"].ToString(),
                        strNombre = r["NOMBRE"].ToString(),
                        strPreasignado = r["PREASIGNADO"].ToString(),
                        numConsecutivo = Convert.ToInt32(r["NUMORDEN"])
                    });
                }
            }
            catch (Exception ex) { throw ex; }
        }

        public void consultarSemana(MReporteProcProd.encabezado encabezado,string sw)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  
       
                OracleParameter r1=null,r2=null,r3=null;

                //Semana actual
                if(sw.Equals("I"))
                {
                    r1 = new OracleParameter("p_numSemana", OracleDbType.Varchar2, 0, ParameterDirection.Input);
                    r2 = new OracleParameter("p_dtmFechaIni", OracleDbType.Date,null , ParameterDirection.Input);
                    r3 = new OracleParameter("p_dtmFechafin", OracleDbType.Date, null, ParameterDirection.Input);
                }

                //Semana ingresada
                if(sw.Equals("S"))
                {
                    r1 = new OracleParameter("p_numSemana", OracleDbType.Varchar2, encabezado.numSemana, ParameterDirection.Input);
                    r2 = new OracleParameter("p_dtmFechaIni", OracleDbType.Date,null , ParameterDirection.Input);
                    r3 = new OracleParameter("p_dtmFechafin", OracleDbType.Date, null, ParameterDirection.Input);
                }

                //Rango de fecha ingresada
                if(sw.Equals("F"))
                {
                    r1 = new OracleParameter("p_numSemana", OracleDbType.Varchar2, 0, ParameterDirection.Input);
                    r2 = new OracleParameter("p_dtmFechaIni", OracleDbType.Date,encabezado.dtmDesde , ParameterDirection.Input);
                    r3 = new OracleParameter("p_dtmFechafin", OracleDbType.Date, encabezado.dtmHasta, ParameterDirection.Input);
                }

                var r4 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var pararametros = new List<OracleParameter> { r1, r2, r3, r4 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_ConsultaSemanaActual", pararametros);

                foreach (DataRow r in dt.Rows)
                {
                    encabezado.numSemana = Convert.ToInt32(r["SEMANA"].ToString());
                    encabezado.dtmDesde = Convert.ToDateTime(r["DESDE"].ToString());
                    encabezado.dtmHasta = Convert.ToDateTime(r["HASTA"].ToString());
                }
            }
            catch (Exception ex) { throw ex; }
        }

        //Consulta la orden de producción ingresada
        public void consultarOrden(MReporteProcProd.encabezado encabezado)
        {
            try 
            {
               OracleConexion oc = new OracleConexion(baseDatos);   

                var r1 = new OracleParameter("p_strNumeroOrden", OracleDbType.Varchar2, 40,encabezado.strNumeroOrden,ParameterDirection.Input);
                var r2 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var parametros = new List<OracleParameter> { r1, r2 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_ConsultaOrdendeProduccion", parametros);

                encabezado.strNombreReferencia = "";
                encabezado.strReferencia = "";
                encabezado.strNombreColor = "";
                encabezado.strColor = "";

                foreach (DataRow dr in dt.Rows)
                {
                    encabezado.strNumeroOrden = dr["NROORD_EOP"].ToString();
                    encabezado.strReferencia = dr["CODREF_REF"].ToString();
                    encabezado.strNombreReferencia = dr["NOMREF_REF"].ToString();
                    encabezado.strColor = dr["CODCOL_COL"].ToString();
                    encabezado.strNombreColor = dr["NOMCOL_COL"].ToString();
                }

            }
            catch (Exception ex) { throw ex; }
        }

        // Consulta los operarios de una orden de producción
        public void consultarOperarioOrdPro(MReporteProcProd.encabezado enc)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                var r1 = new OracleParameter("p_strNumeroOrden", OracleDbType.Varchar2, enc.strNumeroOrden, ParameterDirection.Input);
                var r2 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var parametros =new List<OracleParameter> { r1, r2 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_ConsultarOpeOrdPreasignado", parametros);

                enc.detOperario.Clear();

                foreach (DataRow dr in dt.Rows)
                {
                    enc.detOperario.Add(new MReporteProcProd.operario
                    {
                        strNombreOperario = dr["strNombreEmpleado"].ToString().Trim(),
                        strOperario = dr["strCodigoEmpleado"].ToString().Trim(),
                    
                    numPorcentaje = Convert.ToDouble(dr["numPorcentaje"])});
                }
            }
            catch (Exception ex) { throw ex; }

        }

        public void consultarTallasOrdenPro(MReporteProcProd.encabezado enc)
        {
            if (enc.strNumeroOrden.Trim().Length>5)
            {
                try
                {
                    MDOgeneral mod = new MDOgeneral();
                    OracleConexion oc = new OracleConexion(baseDatos);

                    var r1 = new OracleParameter("pva_nroord", OracleDbType.Varchar2, enc.strNumeroOrden, ParameterDirection.Input);
                    var r2 = new OracleParameter("pva_codprc", OracleDbType.Varchar2, enc.selOpcion.strCodigo, ParameterDirection.Input);
                    var r3 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                    var r4 = new OracleParameter("p_ResultSet2", OracleDbType.RefCursor, ParameterDirection.Output);
                    var r5 = new OracleParameter("pva_result", OracleDbType.Varchar2, ParameterDirection.Output);
                    var r6 = new OracleParameter("pva_errusu", OracleDbType.Varchar2, ParameterDirection.Output);
                    var parametros = new List<OracleParameter> { r1, r2, r3, r4, r5, r6 };
                    DataSet ds = oc.EjecutarSp<DataSet>("SP_TALLASORDENPRO", parametros);

                    DataTable dt = ds.Tables[0];
                    enc.dtReportados = ds.Tables[1];

                    enc.listallas.Clear();

                    string query = "select a.codtal_tal from taltal a inner join maeref b on a.codtje_tal=b.talref_ref where b.codref_ref='" + enc.strReferencia + "' order by a.codtje_tal, a.postal_tal ";
                    DataTable dtTallas = mod.consulta(query);

                    enc.dttallas = dtTallas;

                    int numTot = 0;

                    // Cargamos la lista
                    #region Lista
                    
                    MReporteProcProd.tallas objTallas = new MReporteProcProd.tallas();
                    foreach (DataRow dr in dt.Rows)
                    {
                        objTallas = new MReporteProcProd.tallas();

                        if (dr[1] != null)
                        {
                            objTallas.numTalla1 = Convert.ToInt32(dr[1]);
                            objTallas.numTalla1c = Convert.ToInt32(dr[1]);
                            numTot = numTot + Convert.ToInt32(dr[1]);
                        }
                        else
                        {
                            objTallas.numTalla1 = 0;
                            objTallas.numTalla1c = 0;
                        }

                        if (dr[2] != null)
                        {
                            objTallas.numTalla2 = Convert.ToInt32(dr[2]);
                            objTallas.numTalla2c = Convert.ToInt32(dr[2]);
                            numTot = numTot + Convert.ToInt32(dr[2]);
                        }
                        else
                        {
                            objTallas.numTalla2 = 0;
                            objTallas.numTalla2c = 0;
                        }

                        if (dr[3] != null)
                        {
                            objTallas.numTalla3 = Convert.ToInt32(dr[3]);
                            objTallas.numTalla3c = Convert.ToInt32(dr[3]);
                            numTot = numTot + Convert.ToInt32(dr[3]);
                        }
                        else
                        {
                            objTallas.numTalla3 = 0;
                            objTallas.numTalla3c = 0;
                        }
                        
                        if (dr[4] != null)
                        {
                            objTallas.numTalla4 = Convert.ToInt32(dr[4]);
                            objTallas.numTalla4c = Convert.ToInt32(dr[4]);
                            numTot = numTot + Convert.ToInt32(dr[4]);
                        }
                        else
                        {
                            objTallas.numTalla4 = 0;
                            objTallas.numTalla4c = 0;
                        }

                        if (dr[5] != null)
                        {
                            objTallas.numTalla5 = Convert.ToInt32(dr[5]);
                            objTallas.numTalla5c = Convert.ToInt32(dr[5]);
                            numTot = numTot + Convert.ToInt32(dr[5]);
                        }
                        else
                        {
                            objTallas.numTalla5 = 0;
                            objTallas.numTalla5c = 0;
                        }

                        if (dr[6] != null)
                        {
                            objTallas.numTalla6 = Convert.ToInt32(dr[6]);
                            objTallas.numTalla6c = Convert.ToInt32(dr[6]);
                            numTot = numTot + Convert.ToInt32(dr[6]);
                        }
                        else
                        {
                            objTallas.numTalla6 = 0;
                            objTallas.numTalla6c = 0;
                        }

                        if (dr[7] != null)
                        {
                            objTallas.numTalla7 = Convert.ToInt32(dr[7]);
                            objTallas.numTalla7c = Convert.ToInt32(dr[7]);
                            numTot = numTot + Convert.ToInt32(dr[7]);
                        }
                        else
                        {
                            objTallas.numTalla7 = 0;
                            objTallas.numTalla7c = 0;
                        }

                        if (dr[8] != null)
                        {
                            objTallas.numTalla8 = Convert.ToInt32(dr[8]);
                            objTallas.numTalla8c = Convert.ToInt32(dr[8]);
                            numTot = numTot + Convert.ToInt32(dr[8]);
                        }
                        else
                        {
                            objTallas.numTalla8 = 0;
                            objTallas.numTalla8c = 0;
                        }

                        if (dr[9] != null)
                        {
                            objTallas.numTalla9 = Convert.ToInt32(dr[9]);
                            objTallas.numTalla9c = Convert.ToInt32(dr[9]);
                            numTot = numTot + Convert.ToInt32(dr[9]);
                        }
                        else
                        {
                            objTallas.numTalla9 = 0;
                            objTallas.numTalla9c = 0;
                        }

                        if (dr[10] != null)
                        {
                            objTallas.numTalla10 = Convert.ToInt32(dr[10]);
                            objTallas.numTalla10c = Convert.ToInt32(dr[10]);
                            numTot = numTot + Convert.ToInt32(dr[10]);
                        }
                        else
                        {
                            objTallas.numTalla10 = 0;
                            objTallas.numTalla10c = 0;
                        }

                        if (dr[11] != null)
                        {
                            objTallas.numTalla11 = Convert.ToInt32(dr[11]);
                            objTallas.numTalla11c = Convert.ToInt32(dr[11]);
                            numTot = numTot + Convert.ToInt32(dr[11]);
                        }
                        else
                        {
                            objTallas.numTalla11 = 0;
                            objTallas.numTalla11c = 0;
                        }

                        if (dr[12] != null)
                        {
                            objTallas.numTalla12 = Convert.ToInt32(dr[12]);
                            objTallas.numTalla12c = Convert.ToInt32(dr[12]);
                            numTot = numTot + Convert.ToInt32(dr[12]);
                        }
                        else
                        {
                            objTallas.numTalla12 = 0;
                            objTallas.numTalla12c = 0;
                        }

                        if (dr[13] != null)
                        {
                            objTallas.numTalla13 = Convert.ToInt32(dr[13]);
                            objTallas.numTalla13c = Convert.ToInt32(dr[13]);
                            numTot = numTot + Convert.ToInt32(dr[13]);
                        }
                        else
                        {
                            objTallas.numTalla13 = 0;
                            objTallas.numTalla13c = 0;
                        }

                        if (dr[14] != null)
                        {
                            objTallas.numTalla14 = Convert.ToInt32(dr[14]);
                            objTallas.numTalla14c = Convert.ToInt32(dr[14]);
                            numTot = numTot + Convert.ToInt32(dr[14]);
                        }
                        else
                        {
                            objTallas.numTalla14 = 0;
                            objTallas.numTalla14c = 0;
                        }

                        if (dr[15] != null)
                        {
                            objTallas.numTalla15 = Convert.ToInt32(dr[15]);
                            objTallas.numTalla15c = Convert.ToInt32(dr[15]);
                            numTot = numTot + Convert.ToInt32(dr[15]);
                        }
                        else
                        {
                            objTallas.numTalla15 = 0;
                            objTallas.numTalla15c = 0;
                        }

                        if (dr[16] != null)
                        {
                            objTallas.numTalla16 = Convert.ToInt32(dr[16]);
                            objTallas.numTalla16c = Convert.ToInt32(dr[16]);
                            numTot = numTot + Convert.ToInt32(dr[16]);
                        }
                        else
                        {
                            objTallas.numTalla16 = 0;
                            objTallas.numTalla16c = 0;
                        }

                        if (dr[17] != null)
                        {
                            objTallas.numTalla17 = Convert.ToInt32(dr[17]);
                            objTallas.numTalla17c = Convert.ToInt32(dr[17]);
                            numTot = numTot + Convert.ToInt32(dr[17]);
                        }
                        else
                        {
                            objTallas.numTalla17 = 0;
                            objTallas.numTalla17c = 0;
                        }

                        if (dr[18] != null)
                        {
                            objTallas.numTalla18 = Convert.ToInt32(dr[18]);
                            objTallas.numTalla18c = Convert.ToInt32(dr[18]);
                            numTot = numTot + Convert.ToInt32(dr[18]);
                        }
                        else
                        {
                            objTallas.numTalla18 = 0;
                            objTallas.numTalla18c = 0;
                        }
  
                        if (dr[19] != null)
                        {
                            objTallas.numTalla19 = Convert.ToInt32(dr[19]);
                            objTallas.numTalla19c = Convert.ToInt32(dr[19]);
                            numTot = numTot + Convert.ToInt32(dr[19]);
                        }
                        else
                        {
                            objTallas.numTalla19 = 0;
                            objTallas.numTalla19c = 0;
                        }

                        if (dr[20] != null)
                        {
                            objTallas.numTalla20 = Convert.ToInt32(dr[20]);
                            objTallas.numTalla20c = Convert.ToInt32(dr[20]);
                            numTot = numTot + Convert.ToInt32(dr[20]);
                        }
                        else
                        {
                            objTallas.numTalla20 = 0;
                            objTallas.numTalla20c = 0;
                        }

                        objTallas.numTotal = Convert.ToInt32(numTot);
                        enc.listallas.Add(objTallas);
                    }

                    #endregion
                }
                catch (Exception ex) { throw ex; }
            }
        }

        public DataTable consultarOperario(string strOperario)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                var r1 = new OracleParameter("p_strOperario", OracleDbType.Varchar2, strOperario, ParameterDirection.Input);
                var r2 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var parametros = new List<OracleParameter> { r1, r2};
                DataTable dt = oc.EjecutarSp<DataTable>("SP_ConsultaOperario",parametros);

                return dt;
            }
            catch (Exception ex) { throw ex; }
        }

        //Consulta totales reportrados de la orden de producción
        public void consultarTotalesOrdenPro(MReporteProcProd.encabezado encabezado)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                var r1 = new OracleParameter("p_strNumeroOrden", OracleDbType.Varchar2, 40, encabezado.strNumeroOrden, ParameterDirection.Input);
                var r2 = new OracleParameter("p_strCodigoProceso", OracleDbType.Varchar2, encabezado.selOpcion.strCodigo, ParameterDirection.Input);
                var r3 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var parametros = new List<OracleParameter> { r1, r2, r3 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_ConsultaProcesosReportados", parametros);

                encabezado.numTotalReportado =0;
                encabezado.numTotalOrden = 0;
                encabezado.numTotalaReportar = 0;
                encabezado.numTotalPendiente = 0;
                
                foreach (DataRow dr in dt.Rows)
                {
                    encabezado.numTotalReportado = Convert.ToInt32(dr["NUMCANTIDADREPORTADA"].ToString());
                    encabezado.numTotalOrden = Convert.ToInt32(dr["NUMTOTALORDEN"].ToString());
                }

                encabezado.numTotalPendiente = (encabezado.numTotalOrden - encabezado.numTotalReportado);
                encabezado.numTotalaReportar = (encabezado.numTotalOrden - encabezado.numTotalReportado);
            }
            catch (Exception ex) { throw ex; }
        }

        //Guardar reporte de proceso produccion por operario
        public Boolean guardarRepPrcesoPro(MReporteProcProd.encabezado encRep) 
        {
            try 
            {
                OracleConexion oc = new OracleConexion(baseDatos);

                // Llena la tabla que se pasa al SP con la informacion de los operarios
                #region Operarios
                
                DataTable dt = new DataTable("p_TablaEmpleados");
                dt.Columns.Add("CODEMP");
                dt.Columns.Add("PORCEN");
                dt.Columns.Add("CANTI");
                dt.Columns.Add("CONSEC");

                DataRow dr;
                int i=0;
                double cantiReal=0,porMayor=0;
                int aux=0;

                foreach (MReporteProcProd.operario r in encRep.detOperario) 
                {
                    dr = dt.NewRow();
                    dr["CODEMP"] = r.strOperario;
                    dr["PORCEN"] = r.numPorcentaje;
                    if (r.numPorcentaje > porMayor) 
                    {
                        porMayor = r.numPorcentaje;
                    }

                    dr["CONSEC"] = i;
                    cantiReal = encRep.numTotalaReportar*(r.numPorcentaje / 100);

                    if ((cantiReal - Convert.ToInt32(cantiReal))>=0.6)
                    {
                        dr["CANTI"] = Convert.ToInt32(cantiReal)+1;
                        aux = aux + Convert.ToInt32(cantiReal) + 1;
                    }
                    else
                    {
                        dr["CANTI"] = Convert.ToInt32(cantiReal);
                        aux = aux + Convert.ToInt32(cantiReal);
                    } 
               
                    i = i + 1;
                    dt.Rows.Add(dr);
                }

                if (aux < encRep.numTotalaReportar) 
                {
                    var maxRow = dt.Select("PORCEN = MAX(PORCEN)");
                    maxRow[0]["CANTI"] = Convert.ToInt32(maxRow[0]["CANTI"])+1;                        
                }
                if (aux > encRep.numTotalaReportar)
                {
                    var maxRow = dt.Select("PORCEN = MAX(PORCEN)");
                    maxRow[0]["CANTI"] = Convert.ToInt32(maxRow[0]["CANTI"]) - 1;     
                }

                StringWriter swStringWriter = new StringWriter();
                dt.WriteXml(swStringWriter);
                string xml = swStringWriter.ToString();

                #endregion

                // llena las variables de los detalles de las tallas
                #region Tallas
                
                string strTallas = "";
                string strCantidades = "";

                if (encRep.listallas[0].numTalla1 > 0)
                {
                    strCantidades = strCantidades + encRep.listallas[0].numTalla1.ToString().Trim().PadLeft(2, '0') + "-";
                    strTallas = strTallas + encRep.dttallas.Rows[0][0].ToString().Trim() + "-";
                }

                if (encRep.listallas[0].numTalla2 > 0)
                {
                    strCantidades = strCantidades + encRep.listallas[0].numTalla2.ToString().Trim().PadLeft(2, '0') + "-";
                    strTallas = strTallas + encRep.dttallas.Rows[1][0].ToString().Trim() + "-";
                }

                if (encRep.listallas[0].numTalla3 > 0)
                {
                    strCantidades = strCantidades + encRep.listallas[0].numTalla3.ToString().Trim().PadLeft(2, '0') + "-";
                    strTallas = strTallas + encRep.dttallas.Rows[2][0].ToString().Trim() + "-";
                }

                if (encRep.listallas[0].numTalla4 > 0)
                {
                    strCantidades = strCantidades + encRep.listallas[0].numTalla4.ToString().Trim().PadLeft(2, '0') + "-";
                    strTallas = strTallas + encRep.dttallas.Rows[3][0].ToString().Trim() + "-";
                }

                if (encRep.listallas[0].numTalla5 > 0)
                {
                    strCantidades = strCantidades + encRep.listallas[0].numTalla5.ToString().Trim().PadLeft(2, '0') + "-";
                    strTallas = strTallas + encRep.dttallas.Rows[4][0].ToString().Trim() + "-";
                }

                if (encRep.listallas[0].numTalla6 > 0)
                {
                    strCantidades = strCantidades + encRep.listallas[0].numTalla6.ToString().Trim().PadLeft(2, '0') + "-";
                    strTallas = strTallas + encRep.dttallas.Rows[5][0].ToString().Trim() + "-";
                }

                if (encRep.listallas[0].numTalla7 > 0)
                {
                    strCantidades = strCantidades + encRep.listallas[0].numTalla7.ToString().Trim().PadLeft(2, '0') + "-";
                    strTallas = strTallas + encRep.dttallas.Rows[6][0].ToString().Trim() + "-";
                }

                if (encRep.listallas[0].numTalla8 > 0)
                {
                    strCantidades = strCantidades + encRep.listallas[0].numTalla8.ToString().Trim().PadLeft(2, '0') + "-";
                    strTallas = strTallas + encRep.dttallas.Rows[7][0].ToString().Trim() + "-";
                }

                if (encRep.listallas[0].numTalla9 > 0)
                {
                    strCantidades = strCantidades + encRep.listallas[0].numTalla9.ToString().Trim().PadLeft(2, '0') + "-";
                    strTallas = strTallas + encRep.dttallas.Rows[8][0].ToString().Trim() + "-";
                }

                if (encRep.listallas[0].numTalla10 > 0)
                {
                    strCantidades = strCantidades + encRep.listallas[0].numTalla10.ToString().Trim().PadLeft(2, '0') + "-";
                    strTallas = strTallas + encRep.dttallas.Rows[9][0].ToString().Trim() + "-";
                }

                if (encRep.listallas[0].numTalla11 > 0)
                {
                    strCantidades = strCantidades + encRep.listallas[0].numTalla11.ToString().Trim().PadLeft(2, '0') + "-";
                    strTallas = strTallas + encRep.dttallas.Rows[10][0].ToString().Trim() + "-";
                }

                if (encRep.listallas[0].numTalla12 > 0)
                {
                    strCantidades = strCantidades + encRep.listallas[0].numTalla12.ToString().Trim().PadLeft(2, '0') + "-";
                    strTallas = strTallas + encRep.dttallas.Rows[11][0].ToString().Trim() + "-";
                }

                if (encRep.listallas[0].numTalla13 > 0)
                {
                    strCantidades = strCantidades + encRep.listallas[0].numTalla13.ToString().Trim().PadLeft(2, '0') + "-";
                    strTallas = strTallas + encRep.dttallas.Rows[12][0].ToString().Trim() + "-";
                }

                if (encRep.listallas[0].numTalla14 > 0)
                {
                    strCantidades = strCantidades + encRep.listallas[0].numTalla14.ToString().Trim().PadLeft(2, '0') + "-";
                    strTallas = strTallas + encRep.dttallas.Rows[13][0].ToString().Trim() + "-";
                }

                if (encRep.listallas[0].numTalla15 > 0)
                {
                    strCantidades = strCantidades + encRep.listallas[0].numTalla15.ToString().Trim().PadLeft(2, '0') + "-";
                    strTallas = strTallas + encRep.dttallas.Rows[14][0].ToString().Trim() + "-";
                }

                if (encRep.listallas[0].numTalla16 > 0)
                {
                    strCantidades = strCantidades + encRep.listallas[0].numTalla16.ToString().Trim().PadLeft(2, '0') + "-";
                    strTallas = strTallas + encRep.dttallas.Rows[15][0].ToString().Trim() + "-";
                }

                if (encRep.listallas[0].numTalla17 > 0)
                {
                    strCantidades = strCantidades + encRep.listallas[0].numTalla17.ToString().Trim().PadLeft(2, '0') + "-";
                    strTallas = strTallas + encRep.dttallas.Rows[16][0].ToString().Trim() + "-";
                }

                if (encRep.listallas[0].numTalla18 > 0)
                {
                    strCantidades = strCantidades + encRep.listallas[0].numTalla18.ToString().Trim().PadLeft(2, '0') + "-";
                    strTallas = strTallas + encRep.dttallas.Rows[17][0].ToString().Trim() + "-";
                }

                if (encRep.listallas[0].numTalla19 > 0)
                {
                    strCantidades = strCantidades + encRep.listallas[0].numTalla19.ToString().Trim().PadLeft(2, '0') + "-";
                    strTallas = strTallas + encRep.dttallas.Rows[18][0].ToString().Trim() + "-";
                }

                if (encRep.listallas[0].numTalla20 > 0)
                {
                    strCantidades = strCantidades + encRep.listallas[0].numTalla20.ToString().Trim().PadLeft(2, '0') + "-";
                    strTallas = strTallas + encRep.dttallas.Rows[19][0].ToString().Trim() + "-";
                }

                #endregion

                var r1 = new OracleParameter("P_SEM_RPP", OracleDbType.Int32,encRep.numSemana , ParameterDirection.Input);
                var r2 = new OracleParameter("P_CODPRC_RPP", OracleDbType.Char,encRep.selOpcion.strCodigo , ParameterDirection.Input);
                var r3 = new OracleParameter("P_CANREP_RPP", OracleDbType.Char,encRep.numTotalaReportar , ParameterDirection.Input);
                var r4 = new OracleParameter("P_FECREP_RPP", OracleDbType.Date,encRep.dtmFecha , ParameterDirection.Input);
                var r5 = new OracleParameter("P_REPORTA_RPP", OracleDbType.Char, MDOgeneral.usuario , ParameterDirection.Input);
                var r6 = new OracleParameter("P_NROORD_RPP", OracleDbType.Char, encRep.strNumeroOrden , ParameterDirection.Input);
                var r7 = new OracleParameter("P_CODREF", OracleDbType.Char, encRep.strReferencia , ParameterDirection.Input);
                var r8 = new OracleParameter("p_TablaEmpleados", OracleDbType.XmlType, xml , ParameterDirection.Input);
                var r9 = new OracleParameter("p_tallas", OracleDbType.Varchar2, strTallas, ParameterDirection.Input);
                var r10 = new OracleParameter("p_cantidades", OracleDbType.Varchar2, strCantidades, ParameterDirection.Input);
                var r11 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output);
                var r12 = new OracleParameter("p_strResultado", OracleDbType.Varchar2, ParameterDirection.Output);
                var parametros = new List<OracleParameter> { r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12};
                DataTable val = oc.EjecutarSp<DataTable>("sp_AgregarReporteProcProd", parametros);

                return Convert.ToInt32(r11.Value.ToString()) > 0 ? true : false;
            }
            catch (Exception ex) { throw ex; }
        }

        public DataTable consPreciosMotivosRep()
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                var r1 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var parametros = new List<OracleParameter> { r1 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_CONSPRECIOSMOTIVOSREP", parametros);
                return dt;
            }
            catch (Exception ex) { throw ex; }
        }

        public Boolean  guardarPreciosMotivosRep(DataTable dtMotivos) 
        {
            try 
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                StringWriter swStringWriter = new StringWriter();
                dtMotivos.TableName = "p_tablaMotivos";
                dtMotivos.WriteXml(swStringWriter);
                string xml = swStringWriter.ToString();
                var r1 = new OracleParameter("p_tablaMotivos", OracleDbType.XmlType, xml, ParameterDirection.Input);
                var r2 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output); 
                var parametros = new List<OracleParameter> { r1,r2 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_GRABARMOTIVOSREPARACION", parametros);

                return Convert.ToInt32(r2.Value.ToString()) == 1 ? true : false;
            }
            catch (Exception ex) { throw ex; }
        }

        public Boolean GuardarPermisoUsuarios(string usuario, List<Mpermiso> permisos)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                DataTable dtPermisos = toolsUtiles.ToDataTable(permisos);
                StringWriter swStringWriter = new StringWriter();
                dtPermisos.TableName = "p_tPermisos";
                dtPermisos.WriteXml(swStringWriter);
                string xml = swStringWriter.ToString();
                var r1 = new OracleParameter("p_tPermisos", OracleDbType.XmlType, xml, ParameterDirection.Input);
                var r2 = new OracleParameter("p_strUsuario", OracleDbType.Varchar2, usuario, ParameterDirection.Input);
                var r3 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output);
                var parametros = new List<OracleParameter> { r1, r2, r3 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_GuardarPermisosUsuarios", parametros);
                return Convert.ToInt32(r3.Value.ToString()) == 0 ? false : true;
            }
            catch (Exception ex) { throw ex; }
        }
       
        #endregion

        public CLSSEMANAS consultar_Semana(CLSSEMANAS sem, string sw)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                OracleParameter r1 = null, r2 = null, r3 = null;

                //Semana actual
                if (sw.Equals("I"))
                {
                    r1 = new OracleParameter("p_numSemana", OracleDbType.Varchar2, 0, ParameterDirection.Input);
                    r2 = new OracleParameter("p_dtmFechaIni", OracleDbType.Date, null, ParameterDirection.Input);
                    r3 = new OracleParameter("p_dtmFechafin", OracleDbType.Date, null, ParameterDirection.Input);
                }

                //Semana ingresada
                if (sw.Equals("S"))
                {
                    r1 = new OracleParameter("p_numSemana", OracleDbType.Varchar2, sem.NROSEM_SEM, ParameterDirection.Input);
                    r2 = new OracleParameter("p_dtmFechaIni", OracleDbType.Date, null, ParameterDirection.Input);
                    r3 = new OracleParameter("p_dtmFechafin", OracleDbType.Date, null, ParameterDirection.Input);
                }

                //Rango de fecha ingresada
                if (sw.Equals("F"))
                {
                    r1 = new OracleParameter("p_numSemana", OracleDbType.Varchar2, 0, ParameterDirection.Input);
                    r2 = new OracleParameter("p_dtmFechaIni", OracleDbType.Date, sem.DESDE_SEM, ParameterDirection.Input);
                    r3 = new OracleParameter("p_dtmFechafin", OracleDbType.Date, sem.HASTA_SEM, ParameterDirection.Input);
                }

                var r4 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var pararametros = new List<OracleParameter> { r1, r2, r3, r4 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_ConsultaSemanaActual", pararametros);

                foreach (DataRow r in dt.Rows)
                {
                    sem.NROSEM_SEM= Convert.ToInt32(r["SEMANA"].ToString());
                    sem.DESDE_SEM = Convert.ToDateTime(r["DESDE"].ToString());
                    sem.HASTA_SEM = Convert.ToDateTime(r["HASTA"].ToString());
                }

                return sem;
            }
            catch (Exception ex) { throw ex; }
        }

        //Consulta las devoluciones hechas por un empleado en una semana y proceso especifico
        public List<CLSENCORDP> consultarDevolucionOperario(CLSSEMANAS _semana, CLSMAEEMPP _empleado, CLSPRCPRD _proceso)
        {
            try
            {
                List<CLSENCORDP> enc = new List<CLSENCORDP>();

                OracleConexion oc = new OracleConexion(baseDatos);  

                var r1 = new OracleParameter("p_strProceso", OracleDbType.Varchar2, _proceso.CODPRC_PPR, ParameterDirection.Input);
                var r2 = new OracleParameter("p_strEmpleado", OracleDbType.Varchar2, _empleado.CODEMP_EMP, ParameterDirection.Input);
                var r3 = new OracleParameter("p_numSemana", OracleDbType.Int32, _semana.NROSEM_SEM, ParameterDirection.Input);
                var r4 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var r5 = new OracleParameter("p_ResultSet2", OracleDbType.RefCursor, ParameterDirection.Output);
                var parametros = new List<OracleParameter> { r1, r2,r3,r4,r5};
                DataSet ds = oc.EjecutarSp<DataSet>("SP_ConsultaRepDev", parametros);

                CLSENCORDP objEnc=new CLSENCORDP();
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    objEnc=new CLSENCORDP();
                    objEnc.NROORD_EOP = dr["ordnro_rdv"].ToString();
                    objEnc.CODREF_EOP = dr["codref_eop"].ToString();
                    objEnc.referencia.CODREF_REF = dr["codref_eop"].ToString();
                    objEnc.referencia.NOMREF_REF = dr["nomref_ref"].ToString();
                    objEnc.CODCOL_EOP = dr["codcol_eop"].ToString();
                    objEnc.color.CODCOL_COL = dr["codcol_eop"].ToString();
                    objEnc.color.NOMCOL_COL = dr["nomcol_col"].ToString();
                    objEnc.CANTIDAD = Convert.ToInt32(dr["numCantidad"].ToString());

                    CLSREPDEV repdev;
                    foreach (DataRow dr2 in ds.Tables[1].Select("nroord_eop="+objEnc.NROORD_EOP))
                    {
                        repdev = new CLSREPDEV();
                        repdev.ORDNRO_RDV = dr2["nroord_eop"].ToString();
                        repdev.CODMTP_RDV = dr2["codmat_mat"].ToString();
                        repdev.maeMat.CODMAT_MAT = dr2["codmat_mat"].ToString();
                        repdev.maeMat.NOMMAT_MAT = dr2["nommat_mat"].ToString();
                        repdev.CANENT_RDV = Convert.ToDouble(dr2["cantidad"]);
                        repdev.CANDEV_RDV = Convert.ToDouble(dr2["cantidadDev"]);
                        if (Convert.ToDouble(dr2["cantidadDev"])>0)
                            repdev.PORCEN_RDV = 1;
                        else
                            repdev.PORCEN_RDV = 0;    
                        repdev.NROSEM_RDV = _semana.NROSEM_SEM;
                        repdev.CODEMP_RDV = _empleado.CODEMP_EMP;
                        repdev.CODPRC_RDV = _proceso.CODPRC_PPR;
                        objEnc.repDev.Add(repdev);
                    }
                    
                    enc.Add(objEnc);
                }
                return enc;
            }
            catch (Exception ex) { throw ex; }
        }

        public CLSENCORDP ConsultaRepDevOrden(CLSENCORDP _enc)
        {
            try 
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                var r1 = new OracleParameter("p_strNumeroOrden", OracleDbType.Varchar2, _enc.NROORD_EOP, ParameterDirection.Input);
                var r2 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var r3 = new OracleParameter("p_ResultSet2", OracleDbType.RefCursor, ParameterDirection.Output);
                var parametros = new List<OracleParameter> { r1,r2,r3};
                DataSet ds = oc.EjecutarSp<DataSet>("SP_ConsultaRepDevOrden", parametros);

                CLSENCORDP enc = new CLSENCORDP {NROORD_EOP=_enc.NROORD_EOP };
                foreach (DataRow dr in ds.Tables[0].Rows)
                {

                    enc.NROORD_EOP = dr["nroord_eop"].ToString();
                    enc.CODREF_EOP = dr["codref_eop"].ToString();
                    enc.referencia.CODREF_REF = dr["codref_eop"].ToString();
                    enc.referencia.NOMREF_REF = dr["nomref_ref"].ToString();
                    enc.CODCOL_EOP = dr["codcol_eop"].ToString();
                    enc.color.CODCOL_COL = dr["codcol_eop"].ToString();
                    enc.color.NOMCOL_COL = dr["nomcol_col"].ToString();
                    enc.CANTIDAD = Convert.ToInt32(dr["numCantidad"].ToString());
                    enc.CODCOR1_EOP = dr["codcor1_eop"].ToString();
                    enc.CODCOR2_EOP = dr["codcor3_eop"].ToString();
                    enc.CODCOR3_EOP = dr["codcor3_eop"].ToString();
                    enc.PORCOR1_EOP = Convert.ToDouble(dr["porcor1_eop"]);
                    enc.PORCOR2_EOP = Convert.ToDouble(dr["porcor2_eop"]);
                    enc.PORCOR3_EOP = Convert.ToDouble(dr["porcor3_eop"]);

                    CLSREPDEV repdev;
                    foreach (DataRow dr2 in ds.Tables[1].Select("nroord_eop=" + enc.NROORD_EOP))
                    {
                        repdev = new CLSREPDEV();
                        repdev.ORDNRO_RDV = dr2["nroord_eop"].ToString();
                        repdev.CODMTP_RDV = dr2["codmat_cor"].ToString().Trim() + dr2["codcol_cor"].ToString().Trim();
                        repdev.maeMat.CODMAT_MAT = dr2["codmat_cor"].ToString().Trim() + dr2["codcol_cor"].ToString().Trim();
                        repdev.maeMat.NOMMAT_MAT = dr2["nommat_mat"].ToString();
                        repdev.CANENT_RDV = Convert.ToDouble(dr2["cantidad"]);
                        repdev.CANDEV_RDV = Convert.ToDouble(dr2["cantidadDev"]);
                        enc.repDev.Add(repdev);
                    }
                }

                return enc;
            }
            catch (Exception ex) { throw ex; }
        }

        //Guarda un usuario
        public Boolean GuardarUsuario(CLSMAEUSUP _usuario) 
        {
            try 
            {
                OracleConexion oc = new OracleConexion(baseDatos);  
       
                var r1 = new OracleParameter("p_strUsuario", OracleDbType.Char,6,_usuario.CODUSU_USU, ParameterDirection.Input);
                var r2 = new OracleParameter("p_strNombre", OracleDbType.Varchar2,40,_usuario.NOMUSU_USU, ParameterDirection.Input);
                var r3 = new OracleParameter("p_strClave", OracleDbType.Char,6, _usuario.PASUSU_USU, ParameterDirection.Input);
                var r4 = new OracleParameter("p_strEstado", OracleDbType.Char, 1, _usuario.ACTUSU_USU, ParameterDirection.Input);
                var r5 = new OracleParameter("p_strGestion", OracleDbType.Char, 1, _usuario.USAINDGES_USU, ParameterDirection.Input);
                var r6 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output);
                var pararametros = new List<OracleParameter> { r1, r2, r3, r4 , r5, r6};
                DataTable str = oc.EjecutarSp<DataTable>("SP_GUARDARUSUARIO", pararametros);
                return Convert.ToInt32(r6.Value.ToString())==1?true:false;
            
            }
            catch (Exception ex) { throw ex; }
        }
           
        public Boolean guardarDevolucion(List<CLSENCORDP> dev, CLSSEMANAS _semana, CLSPRCPRD _selProceso)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                StringWriter swStringWriter = new StringWriter();
                //List<CLSREPDEV> lisRepDev=(from cust in dev from cust2 in cust.repDev where cust2.CANDEV_RDV>0 select cust2).ToList();
                List<CLSREPDEV> lisRepDev = (from cust in dev from cust2 in cust.repDev where cust2.CANDEV_RDV >= 0 select cust2).ToList();
                List<CLSENCORDP> lisOrd = (from cust in dev where cust.PORCOR1_EOP > 0 select cust).ToList();
                
                DataTable dt = toolsUtiles.ToDataTable(lisRepDev);
                dt.TableName = "p_TablaMateriales";
                dt.WriteXml(swStringWriter);
                string xml = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                DataTable dtOrdenes = toolsUtiles.ToDataTable(lisOrd);
                dtOrdenes.TableName = "p_TablaOrdenes";
                dtOrdenes.WriteXml(swStringWriter);
                string xml2 = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                var r1 = new OracleParameter("P_numSemana", OracleDbType.Int32, _semana.NROSEM_SEM, ParameterDirection.Input);
                var r2 = new OracleParameter("P_numAno", OracleDbType.Int32, Convert.ToInt32(_semana.DESDE_SEM.Year.ToString()), ParameterDirection.Input);
                var r3 = new OracleParameter("P_strProceso", OracleDbType.Varchar2, _selProceso.CODPRC_PPR, ParameterDirection.Input);
                var r4 = new OracleParameter("p_TablaMateriales", OracleDbType.XmlType, xml, ParameterDirection.Input);
                var r5 = new OracleParameter("p_TablaOrdenes", OracleDbType.XmlType, xml2, ParameterDirection.Input);
                var r6 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output);
                var pararametros = new List<OracleParameter> { r1, r2, r3, r4, r5,r6 };
                DataTable dtt = oc.EjecutarSp<DataTable>("sp_AgregarDevolucionMatPri", pararametros);

                return Convert.ToInt32(r6.Value.ToString()) == 1 ? true : false;
            }
            catch (Exception ex) { throw ex; }
        }

        //consulta al inventario fisico 
        public List<CLSFISICO> consultarInventarioFisico(CLSMAEGRP _grupo, CLSMAESUB _subgrupo)
        {
            try
            {
                List<CLSFISICO> fisico = new List<CLSFISICO>();

                OracleConexion oc = new OracleConexion(baseDatos);  

                var r1 = new OracleParameter("p_strGrupo", OracleDbType.Varchar2,_grupo==null?null: _grupo.CODGRP_GRP , ParameterDirection.Input);
                var r2 = new OracleParameter("p_strSubgrupo", OracleDbType.Varchar2,_subgrupo==null?null: _subgrupo.CODSUB_SUB, ParameterDirection.Input);
                var r3 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r1, r2, r3};
                DataTable dt = oc.EjecutarSp<DataTable>("SP_ConsultaInventarioFisico", parametros);

                CLSFISICO objfis = new CLSFISICO();
                foreach (DataRow dr in dt.Rows)
                {
                    objfis = new CLSFISICO();
                    objfis.CODMAT_FIS = dr["CODMAT_FIS"].ToString();
                    objfis.CODCOL_FIS = dr["CODCOL_FIS"].ToString();
                    objfis.NOMMAT_FIS = dr["NOMMAT_FIS"].ToString();
                    objfis.NOMCOL_FIS = dr["NOMCOL_FIS"].ToString();
                    objfis.UNIUSO_FIS = dr["UNIUSO_FIS"].ToString();
                    objfis.CANFIS_FIS = Convert.ToDouble(dr["CANFIS_FIS"]);
                    objfis.CODGRP_FIS = dr["CODGRP_FIS"].ToString();
                    objfis.CODSUB_FIS = dr["CODSUB_FIS"].ToString();
              

                    fisico.Add(objfis);
                }

                return fisico;
            }
            catch (Exception ex) { throw ex; }
        }

        public Boolean consultaExisteInvFis()
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                var r1 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r1 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_ConsultaExisteInvFis", parametros);
                
                return Convert.ToInt32(dt.Rows[0][0])>0 ? true : false;
            }
            catch (Exception ex) { throw ex; }
        }

        public Boolean generarInventarioFisico()
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                var r1 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r1 };
                oc.EjecutarSp<DataTable>("SP_GenerarInventarioFisico", parametros);

                return Convert.ToInt32(r1.Value.ToString()) == 1 ? true : false;

            }
            catch (Exception ex) { throw ex; }
        }

        //Guardar opciones
        public Boolean GuardarOpciones(List<CLSMAEOPCP> _actOrden, List<CLSMAEOPCP> _delOpcion, List<CLSMAEOPCP> _actOpcion, List<CLSMAEOPCP> _insOpcion)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                StringWriter swStringWriter = new StringWriter();

                DataTable dt = toolsUtiles.ToDataTable(_actOrden);
                dt.TableName = "p_actOrden";
                dt.WriteXml(swStringWriter);
                string p_actOrden = swStringWriter.ToString();
                swStringWriter = new StringWriter();
                
                dt = toolsUtiles.ToDataTable(_delOpcion);
                dt.TableName = "p_delOpcion";
                dt.WriteXml(swStringWriter);
                string p_delOpcion = swStringWriter.ToString();
                swStringWriter = new StringWriter();
                
                dt = toolsUtiles.ToDataTable(_actOpcion);
                dt.TableName = "p_actOpcion";
                dt.WriteXml(swStringWriter);
                string p_actOpcion = swStringWriter.ToString();
                swStringWriter = new StringWriter();
                
                dt = toolsUtiles.ToDataTable(_insOpcion);
                dt.TableName = "p_insOpcion";
                dt.WriteXml(swStringWriter);
                string p_insOpcion = swStringWriter.ToString();

                var r1 = new OracleParameter("p_actOrden", OracleDbType.XmlType, p_actOrden, ParameterDirection.Input);
                var r2 = new OracleParameter("p_delOpcion", OracleDbType.XmlType, p_delOpcion, ParameterDirection.Input);
                var r3 = new OracleParameter("p_actOpcion", OracleDbType.XmlType, p_actOpcion, ParameterDirection.Input);
                var r4 = new OracleParameter("p_insOpcion", OracleDbType.XmlType, p_insOpcion,ParameterDirection.Input);
                var r5 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output);
              
                var pararametros = new List<OracleParameter> { r1, r2, r3, r4, r5 };
                DataTable dtt = oc.EjecutarSp<DataTable>("SP_GUARDAROPCIONES", pararametros);

                return Convert.ToInt32(r5.Value.ToString()) == 1 ? true : false;
            }
            catch (Exception ex) { throw ex; }
        }

        public Boolean grabarInventarioFisico(List<CLSFISICO> fis)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                StringWriter swStringWriter = new StringWriter();

                DataTable dt = toolsUtiles.ToDataTable(fis);
                dt.TableName = "p_TablaInvFisico";
                dt.WriteXml(swStringWriter);
                string xml = swStringWriter.ToString();

                var r1 = new OracleParameter("p_TablaInvFisico", OracleDbType.XmlType, xml, ParameterDirection.Input);
                var r2 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output);

                var pararametros = new List<OracleParameter> { r1, r2 };
                DataTable dtt = oc.EjecutarSp<DataTable>("sp_GrabarInventariofisico", pararametros);

                return Convert.ToInt32(r2.Value.ToString()) == 1 ? true : false;
            }
            catch (Exception ex) { throw ex; }
        }

        public List<CLSFISICO> compararInventarioFisico(CLSMAEGRP _grupo, CLSMAESUB _subgrupo)
        {
            try
            {
                List<CLSFISICO> fisico = new List<CLSFISICO>();

                OracleConexion oc = new OracleConexion(baseDatos);  

                var r1 = new OracleParameter("p_strGrupo", OracleDbType.Varchar2,_grupo==null?null: _grupo.CODGRP_GRP, ParameterDirection.Input);
                var r2 = new OracleParameter("p_strSubgrupo", OracleDbType.Varchar2,_subgrupo==null?null: _subgrupo.CODSUB_SUB, ParameterDirection.Input);
                var r3 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r1, r2, r3 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_ComparaInventarioFisvsTeo", parametros);

                CLSFISICO objfis = new CLSFISICO();
                foreach (DataRow dr in dt.Rows)
                {
                    objfis = new CLSFISICO();
                    objfis.CODMAT_FIS = dr["CODMAT_FIS"].ToString();
                    objfis.CODCOL_FIS = dr["CODCOL_FIS"].ToString();
                    objfis.NOMMAT_FIS = dr["NOMMAT_FIS"].ToString();
                    objfis.NOMCOL_FIS = dr["NOMCOL_FIS"].ToString();
                    objfis.CANFIS_FIS = Convert.ToDouble(dr["CANFIS_FIS"]);
                    objfis.maeMtp.EXIMTP_MTP = Convert.ToDouble(dr["eximtp_mtp"]);

                    fisico.Add(objfis);
                }

                return fisico;
            }
            catch (Exception ex) { throw ex; }
        }

        public Boolean finalizarInventarioFisico()
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                StringWriter swStringWriter = new StringWriter();

                var r1 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output);

                var pararametros = new List<OracleParameter> { r1 };
                DataTable dt = oc.EjecutarSp<DataTable>("sp_FinalizarInventariofisico", pararametros);

                return Convert.ToInt32(r1.Value.ToString()) == 1 ? true : false;
            }
            catch (Exception ex) { throw ex; }
        }

        public List<CLSCTGREF> consCategoriaProcesos(CLSMAEREF referencia) 
        {
            List<CLSCTGREF> categorias = new List<CLSCTGREF>();
            try 
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                var r1 = new OracleParameter("p_strCodRef", OracleDbType.Varchar2,referencia.CODREF_REF , ParameterDirection.Input);
                var r2 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var parametros = new List<OracleParameter> { r1, r2};
                DataTable dt = oc.EjecutarSp<DataTable>("SP_ConsCategoriaProceso", parametros);
                CLSCTGREF categoria;
                foreach (DataRow dr in dt.Rows)
                {
                    categoria = new CLSCTGREF();
                    categoria.proceso.CODPRC_PPR = dr["CODPRC_PPR"].ToString();
                    categoria.proceso.NOMPRC_PPR = dr["NOMPRC_PPR"].ToString();
                    categoria.CODPRC_CRF=dr["CODPRC_PPR"].ToString();
                    categoria.CODREF_CRF = dr["CODREF_CRF"].ToString();
                    categoria.VALOR_CRF =Convert.ToDouble(dr["VALOR_CRF"]);
                    categorias.Add(categoria);
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }

            return categorias;
        }

        public bool GuardarCategoriaProceso(List<CLSCTGREF> lisCategorias) 
        {
            try 
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                StringWriter swStringWriter = new StringWriter();
                DataTable dt = toolsUtiles.ToDataTable(lisCategorias);

                dt.TableName = "p_Categorias";
                dt.WriteXml(swStringWriter);
                string xml = swStringWriter.ToString();

                var r1 = new OracleParameter("p_Categorias", OracleDbType.XmlType, xml, ParameterDirection.Input);
                var r2 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output);

                var pararametros = new List<OracleParameter> { r1, r2 };
                DataTable dtt = oc.EjecutarSp<DataTable>("SP_GuardarCategoriaProceso", pararametros);

                return Convert.ToInt32(r2.Value.ToString()) == 1 ? true : false;
            }
            catch (Exception ex) { throw ex; }
        }


        public List<CLSTABDAN> ConsultaDaños(CLSMAESEC seccion)
        {
            List<CLSTABDAN> daños= new List<CLSTABDAN>();
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                var r1 = new OracleParameter("p_strDaño", OracleDbType.Varchar2, seccion.CODSEC_SEC, ParameterDirection.Input);
                var r2 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var parametros = new List<OracleParameter> { r1, r2 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_ConsultaDaños", parametros);
                CLSTABDAN daño;
                foreach (DataRow dr in dt.Rows)
                {
                    daño = new CLSTABDAN();
                    daño.SECDAN_DAN = dr["SECDAN_DAN"].ToString();
                    daño.CODDAN_DAN = dr["CODDAN_DAN"].ToString();
                    daño.NOMDAN_DAN = dr["NOMDAN_DAN"].ToString();
                    daño.COSTO_DAN = Convert.ToDouble(dr["COSTO_DAN"]);
                    daños.Add(daño);
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }

            return daños;
        }

        //Guardar Daños
        public Boolean GuardarDaños(List<CLSTABDAN> p_Actualizar, List<CLSTABDAN> p_Eliminar, List<CLSTABDAN> p_Agregar, CLSMAESEC _seccion)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                StringWriter swStringWriter = new StringWriter();

                DataTable dt = toolsUtiles.ToDataTable(p_Actualizar);
                dt.TableName = "p_Actualizar";
                dt.WriteXml(swStringWriter);
                string x_Actualizar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                dt = toolsUtiles.ToDataTable(p_Eliminar);
                dt.TableName = "p_Eliminar";
                dt.WriteXml(swStringWriter);
                string x_Eliminar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                dt = toolsUtiles.ToDataTable(p_Agregar);
                dt.TableName = "p_Agregar";
                dt.WriteXml(swStringWriter);
                string x_Agregar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                var r1 = new OracleParameter("p_Actualizar", OracleDbType.XmlType, x_Actualizar, ParameterDirection.Input);
                var r2 = new OracleParameter("p_Eliminar", OracleDbType.XmlType, x_Eliminar, ParameterDirection.Input);
                var r3 = new OracleParameter("p_Agregar", OracleDbType.XmlType, x_Agregar, ParameterDirection.Input);
                var r4 = new OracleParameter("p_Seccion", OracleDbType.Char, _seccion.CODSEC_SEC, ParameterDirection.Input);
                var r5 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output);

                var pararametros = new List<OracleParameter> {r1,r2, r3, r4, r5 };
                DataTable dtt = oc.EjecutarSp<DataTable>("SP_GuardarDanos", pararametros);

                return Convert.ToInt32(r5.Value.ToString()) == 1 ? true : false;
            }
            catch (Exception ex) { throw ex; }
        }

        //consulta las piezas de la tabla maestra 
        public List<CLSTABPIE> consultarPiezas()
        {
            try
            {
                List<CLSTABPIE> pieza = new List<CLSTABPIE>();

                OracleConexion oc = new OracleConexion(baseDatos);  

                var r1 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r1 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_ConsultaPiezas", parametros);

                CLSTABPIE objpie = new CLSTABPIE();
                foreach (DataRow dr in dt.Rows)
                {
                    objpie = new CLSTABPIE();
                    objpie.CODPIE_PIE = dr["CODPIE_PIE"].ToString();
                    objpie.NOMBRE_PIE = dr["NOMBRE_PIE"].ToString();

                    pieza.Add(objpie);
                }

                return pieza;
            }
            catch (Exception ex) { throw ex; }
        }

        // Guardar piezas
        public Boolean guardarPiezas(List<CLSTABPIE> p_Actualizar, List<CLSTABPIE> p_Eliminar, List<CLSTABPIE> p_Agregar)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                StringWriter swStringWriter = new StringWriter();

                DataTable dt = toolsUtiles.ToDataTable(p_Actualizar);
                dt.TableName = "p_Actualizar";
                dt.WriteXml(swStringWriter);
                string x_Actualizar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                dt = toolsUtiles.ToDataTable(p_Eliminar);
                dt.TableName = "p_Eliminar";
                dt.WriteXml(swStringWriter);
                string x_Eliminar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                dt = toolsUtiles.ToDataTable(p_Agregar);
                dt.TableName = "p_Agregar";
                dt.WriteXml(swStringWriter);
                string x_Agregar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                var r1 = new OracleParameter("p_Actualizar", OracleDbType.XmlType, x_Actualizar, ParameterDirection.Input);
                var r2 = new OracleParameter("p_Eliminar", OracleDbType.XmlType, x_Eliminar, ParameterDirection.Input);
                var r3 = new OracleParameter("p_Agregar", OracleDbType.XmlType, x_Agregar, ParameterDirection.Input);
                var r4 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r1, r2, r3, r4 };
                DataTable dtt = oc.EjecutarSp<DataTable>("sp_GuardarPiezas", parametros);

                return Convert.ToInt32(r4.Value.ToString()) == 1 ? true : false;

            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            return false;
        }

        // consulta las causas de la tabla maestra
        public List<CLSTABCAU> consultarCausas()
        {
            try
            {
                List<CLSTABCAU> causa = new List<CLSTABCAU>();

                OracleConexion oc = new OracleConexion(baseDatos);  

                var r1 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r1 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_ConsultaCausas",parametros);

                CLSTABCAU objcau = new CLSTABCAU();
                foreach (DataRow dr in dt.Rows)
                {
                    objcau = new CLSTABCAU();
                    objcau.CODCAU_CAU = dr["CODCAU_CAU"].ToString();
                    objcau.NOMBRE_CAU = dr["NOMBRE_CAU"].ToString();

                    causa.Add(objcau);
                }
                return causa;
            }
            catch (Exception ex) { throw ex; }
        }

        // Guardar causas
        public Boolean guardarCausas(List<CLSTABCAU> p_Actualizar, List<CLSTABCAU> p_Eliminar, List<CLSTABCAU> p_Agregar)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                StringWriter swStringWriter = new StringWriter();

                DataTable dt = toolsUtiles.ToDataTable(p_Actualizar);
                dt.TableName = "p_Actualizar";
                dt.WriteXml(swStringWriter);
                string x_Actualizar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                dt = toolsUtiles.ToDataTable(p_Eliminar);
                dt.TableName = "p_Eliminar";
                dt.WriteXml(swStringWriter);
                string x_Eliminar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                dt = toolsUtiles.ToDataTable(p_Agregar);
                dt.TableName = "p_Agregar";
                dt.WriteXml(swStringWriter);
                string x_Agregar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                var r1 = new OracleParameter("p_Actualizar", OracleDbType.XmlType, x_Actualizar, ParameterDirection.Input);
                var r2 = new OracleParameter("p_Eliminar", OracleDbType.XmlType, x_Eliminar, ParameterDirection.Input);
                var r3 = new OracleParameter("p_Agregar", OracleDbType.XmlType, x_Agregar, ParameterDirection.Input);
                var r4 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r1, r2, r3, r4 };
                DataTable dtt = oc.EjecutarSp<DataTable>("SP_GuardarCausas", parametros);

                return Convert.ToInt32(r4.Value.ToString())==1 ? true : false ;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            return false;
        }

        //Consultar soluciones
        public List<CLSTABSOL> consultarSoluciones()
        {
            try
            {
                List<CLSTABSOL> solucion = new List<CLSTABSOL>();

                OracleConexion oc = new OracleConexion(baseDatos);  

                var r1 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r1 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_ConsultaSoluciones", parametros);

                CLSTABSOL objsol = new CLSTABSOL();
                foreach (DataRow dr in dt.Rows)
                {
                    objsol = new CLSTABSOL();
                    objsol.CODSOL_SOL = dr["CODSOL_SOL"].ToString();
                    objsol.NOMBRE_SOL = dr["NOMBRE_SOL"].ToString();

                    solucion.Add(objsol);
                }
                return solucion;
            }
            catch (Exception ex) { throw ex; }
        }

        public Boolean guardarFactura(string strNroFactura, string strCodCliente, DateTime dtmFecha, DateTime dtmVencimiento, double numTotal,
            double numIva, double numTotalIva, double numPorcRetencion, double numRetencion, double numDescuento, double numFlete, string strConceptoFac, List<MFacturacion.detalleOrdenes> p_Agregar)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                StringWriter swStringWriter = new StringWriter();

                DataTable dt = toolsUtiles.ToDataTable(p_Agregar);
                dt.TableName = "p_Agregar";
                dt.WriteXml(swStringWriter);
                string x_Agregar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                var r1 = new OracleParameter("p_numFactura", OracleDbType.Varchar2, strNroFactura, ParameterDirection.Input);
                var r2 = new OracleParameter("p_codCliente", OracleDbType.Varchar2, strCodCliente, ParameterDirection.Input);
                var r3 = new OracleParameter("p_Fecha", OracleDbType.Date, dtmFecha.Date, ParameterDirection.Input);
                var r4 = new OracleParameter("p_FechaVence", OracleDbType.Date, dtmVencimiento.Date, ParameterDirection.Input);
                var r5 = new OracleParameter("p_Total", OracleDbType.Int32, Convert.ToInt32(numTotal), ParameterDirection.Input);
                var r6 = new OracleParameter("p_numIva", OracleDbType.Int32, Convert.ToInt32(numIva), ParameterDirection.Input);
                var r7 = new OracleParameter("p_Iva", OracleDbType.Int32, Convert.ToInt32(numTotalIva), ParameterDirection.Input);
                var r8 = new OracleParameter("p_PorcRetencion", OracleDbType.Int32, Convert.ToInt32(numPorcRetencion), ParameterDirection.Input);
                var r9 = new OracleParameter("p_Retencion", OracleDbType.Int32, Convert.ToInt32(numRetencion), ParameterDirection.Input);
                var r10 = new OracleParameter("p_Descuento", OracleDbType.Int32, Convert.ToInt32(numDescuento), ParameterDirection.Input);
                var r11 = new OracleParameter("p_Flete", OracleDbType.Int32, Convert.ToInt32(numFlete), ParameterDirection.Input);
                var r12 = new OracleParameter("p_Concepto", OracleDbType.Varchar2, strConceptoFac, ParameterDirection.Input);
                var r13 = new OracleParameter("p_Agregar", OracleDbType.XmlType, x_Agregar, ParameterDirection.Input);
                var r14 = new OracleParameter("p_numResultado", OracleDbType.Int16, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14 };
                DataTable dtt = oc.EjecutarSp<DataTable>("SP_GuardarFactura", parametros);

                return Convert.ToInt16(r12.Value.ToString()) == 1 ? true : false;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            return false;
        }

        public Boolean guardarFacturaVarios(string strNroFactura, string strCodCliente, DateTime dtmFecha, DateTime dtmVencimiento, double numTotal,
            double numIva, double numRetencion, double numDescuento, double numFlete, string strConceptoFac, string strTipoDoc,
            string strEmpresa, string strDetalle, string strParametros, List<MFacturacion.facturacionVarios> p_Agregar)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                StringWriter swStringWriter = new StringWriter();

                DataTable dt = toolsUtiles.ToDataTable(p_Agregar);
                dt.TableName = "p_Agregar";
                dt.WriteXml(swStringWriter);
                string x_Agregar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                var r1 = new OracleParameter("p_numFactura", OracleDbType.Varchar2, strNroFactura, ParameterDirection.Input);
                var r2 = new OracleParameter("p_codCliente", OracleDbType.Varchar2, strCodCliente, ParameterDirection.Input);
                var r3 = new OracleParameter("p_Fecha", OracleDbType.Date, dtmFecha.Date, ParameterDirection.Input);
                var r4 = new OracleParameter("p_FechaVence", OracleDbType.Date, dtmVencimiento.Date, ParameterDirection.Input);
                var r5 = new OracleParameter("p_Total", OracleDbType.Int32, Convert.ToInt32(numTotal), ParameterDirection.Input);
                var r6 = new OracleParameter("p_Iva", OracleDbType.Int32, Convert.ToInt32(numIva), ParameterDirection.Input);
                var r7 = new OracleParameter("p_Retencion", OracleDbType.Int32, Convert.ToInt32(numRetencion), ParameterDirection.Input);
                var r8 = new OracleParameter("p_Descuento", OracleDbType.Int32, Convert.ToInt32(numDescuento), ParameterDirection.Input);
                var r9 = new OracleParameter("p_Flete", OracleDbType.Int32, Convert.ToInt32(numFlete), ParameterDirection.Input);
                var r10 = new OracleParameter("p_Concepto", OracleDbType.Varchar2, strConceptoFac, ParameterDirection.Input);
                var r11 = new OracleParameter("p_TipoDoc", OracleDbType.Varchar2, strTipoDoc, ParameterDirection.Input);
                var r12 = new OracleParameter("p_Empresa", OracleDbType.Varchar2, strEmpresa, ParameterDirection.Input);
                var r13 = new OracleParameter("p_Detalle", OracleDbType.Varchar2, strDetalle, ParameterDirection.Input);
                var r14 = new OracleParameter("p_strOrdenes", OracleDbType.Varchar2, strParametros, ParameterDirection.Input);
                var r15 = new OracleParameter("p_Agregar", OracleDbType.XmlType, x_Agregar, ParameterDirection.Input);
                var r16 = new OracleParameter("p_numResultado", OracleDbType.Int16, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16 };
                DataTable dtt = oc.EjecutarSp<DataTable>("SP_GuardarFacturaVarios", parametros);

                return Convert.ToInt16(r16.Value.ToString()) == 1 ? true : false;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            return false;
        }

        // Guardar novedades en pesos
        public Boolean guardarNovedades(DateTime dtmFecha, int numSemana, string strProceso, string strEmpleado, string strEstado, string strCodCPT,
                List<CLSNOVPRD> p_Actualizar, List<CLSNOVPRD> p_Eliminar, List<CLSNOVPRD> p_Agregar)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                StringWriter swStringWriter = new StringWriter();

                DataTable dt = toolsUtiles.ToDataTable(p_Actualizar);
                dt.TableName = "p_Actualizar";
                dt.WriteXml(swStringWriter);
                string x_Actualizar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                dt = toolsUtiles.ToDataTable(p_Eliminar);
                dt.TableName = "p_Eliminar";
                dt.WriteXml(swStringWriter);
                string x_Eliminar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                dt = toolsUtiles.ToDataTable(p_Agregar);
                dt.TableName = "p_Agregar";
                dt.WriteXml(swStringWriter);
                string x_Agregar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                var r1 = new OracleParameter("p_numAno", OracleDbType.Int16, dtmFecha.Year, ParameterDirection.Input);
                var r2 = new OracleParameter("p_numSemana", OracleDbType.Int16, numSemana, ParameterDirection.Input);
                var r3 = new OracleParameter("p_strProceso", OracleDbType.Char, strProceso, ParameterDirection.Input);
                var r4 = new OracleParameter("p_strEmpleado", OracleDbType.Char, strEmpleado, ParameterDirection.Input);
                var r5 = new OracleParameter("p_strEstadoNovedad", OracleDbType.Char, strEstado, ParameterDirection.Input);
                var r6 = new OracleParameter("p_strCodigoCPT", OracleDbType.Char, strCodCPT, ParameterDirection.Input);
                var r7 = new OracleParameter("p_Actualizar", OracleDbType.XmlType, x_Actualizar, ParameterDirection.Input);
                var r8 = new OracleParameter("p_Eliminar", OracleDbType.XmlType, x_Eliminar, ParameterDirection.Input);
                var r9 = new OracleParameter("p_Agregar", OracleDbType.XmlType, x_Agregar, ParameterDirection.Input);
                var r10 = new OracleParameter("p_numResultado", OracleDbType.Int16, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r1, r2, r3, r4, r5, r6, r7, r8, r9, r10 };
                DataTable dtt = oc.EjecutarSp<DataTable>("SP_GuardarNovedades", parametros);

                return Convert.ToInt16(r10.Value.ToString())==1 ? true : false ;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }

            return false;
        }

        // Guardar novedades por concepto
        public Boolean guardarNovedadesConcepto(DateTime dtmFecha, int numSemana, string strProceso, string strEmpleado, string strEstado,
                List<CLSNOVPRD> p_Actualizar, List<CLSNOVPRD> p_Eliminar, List<CLSNOVPRD> p_Agregar)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                StringWriter swStringWriter = new StringWriter();

                DataTable dt = toolsUtiles.ToDataTable(p_Actualizar);
                dt.TableName = "p_Actualizar";
                dt.WriteXml(swStringWriter);
                string x_Actualizar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                dt = toolsUtiles.ToDataTable(p_Eliminar);
                dt.TableName = "p_Eliminar";
                dt.WriteXml(swStringWriter);
                string x_Eliminar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                dt = toolsUtiles.ToDataTable(p_Agregar);
                dt.TableName = "p_Agregar";
                dt.WriteXml(swStringWriter);
                string x_Agregar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                var r1 = new OracleParameter("p_numAno", OracleDbType.Int16, dtmFecha.Year, ParameterDirection.Input);
                var r2 = new OracleParameter("p_numSemana", OracleDbType.Int16, numSemana, ParameterDirection.Input);
                var r3 = new OracleParameter("p_strProceso", OracleDbType.Char, strProceso, ParameterDirection.Input);
                var r4 = new OracleParameter("p_strEmpleado", OracleDbType.Char, strEmpleado, ParameterDirection.Input);
                var r5 = new OracleParameter("p_strEstadoNovedad", OracleDbType.Char, strEstado, ParameterDirection.Input);
                var r6 = new OracleParameter("p_Actualizar", OracleDbType.XmlType, x_Actualizar, ParameterDirection.Input);
                var r7 = new OracleParameter("p_Eliminar", OracleDbType.XmlType, x_Eliminar, ParameterDirection.Input);
                var r8 = new OracleParameter("p_Agregar", OracleDbType.XmlType, x_Agregar, ParameterDirection.Input);
                var r9 = new OracleParameter("p_numResultado", OracleDbType.Int16, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r1, r2, r3, r4, r5, r6, r7, r8, r9 };
                DataTable dtt = oc.EjecutarSp<DataTable>("SP_GuardarNovedadesConcepto", parametros);

                return Convert.ToInt16(r9.Value.ToString()) == 1 ? true : false;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }

            return false;
        }

        // Guardar soluciones
        public Boolean guardarSoluciones(List<CLSTABSOL> p_Actualizar, List<CLSTABSOL> p_Eliminar, List<CLSTABSOL> p_Agregar)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                StringWriter swStringWriter = new StringWriter();

                DataTable dt = toolsUtiles.ToDataTable(p_Actualizar);
                dt.TableName = "p_Actualizar";
                dt.WriteXml(swStringWriter);
                string x_Actualizar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                dt = toolsUtiles.ToDataTable(p_Eliminar);
                dt.TableName = "p_Eliminar";
                dt.WriteXml(swStringWriter);
                string x_Eliminar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                dt = toolsUtiles.ToDataTable(p_Agregar);
                dt.TableName = "p_Agregar";
                dt.WriteXml(swStringWriter);
                string x_Agregar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                var r1 = new OracleParameter("p_Actualizar", OracleDbType.XmlType, x_Actualizar, ParameterDirection.Input);
                var r2 = new OracleParameter("p_Eliminar", OracleDbType.XmlType, x_Eliminar, ParameterDirection.Input);
                var r3 = new OracleParameter("p_Agregar", OracleDbType.XmlType, x_Agregar, ParameterDirection.Input);
                var r4 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r1, r2, r3, r4 };
                DataTable dtt = oc.EjecutarSp<DataTable>("SP_GuardarSoluciones", parametros);

                return Convert.ToInt32(r4.Value.ToString())==1 ? true : false ;

            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            return false;
        }

        public Int32 consultarConsecutivoNovPesos(DateTime dtmFecha, int numSemana, string strProceso, string strEmpleado)
        {
            OracleConexion oc = new OracleConexion(baseDatos);  

            var r1 = new OracleParameter("p_numAno", OracleDbType.Int16, dtmFecha.Year, ParameterDirection.Input);
            var r2 = new OracleParameter("p_numSemana", OracleDbType.Int16, numSemana, ParameterDirection.Input);
            var r3 = new OracleParameter("p_strProceso", OracleDbType.Char, strProceso, ParameterDirection.Input);
            var r4 = new OracleParameter("p_strEmpleado", OracleDbType.Char, strEmpleado, ParameterDirection.Input);
            var r5 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output);

            var parametros = new List<OracleParameter> { r1, r2, r3, r4, r5 };
            DataTable dt = oc.EjecutarSp<DataTable>("SP_ConsultaConsecutivoNovedad", parametros);

            return Convert.ToInt32(r5.Value.ToString());
        }

        public Int32 consultarConsecutivoNovConcepto(DateTime dtmFecha, int numSemana, string strProceso, string strEmpleado)
        {
            OracleConexion oc = new OracleConexion(baseDatos);  

            var r1 = new OracleParameter("p_numAno", OracleDbType.Int16, dtmFecha.Year, ParameterDirection.Input);
            var r2 = new OracleParameter("p_numSemana", OracleDbType.Int16, numSemana, ParameterDirection.Input);
            var r3 = new OracleParameter("p_strProceso", OracleDbType.Char, strProceso, ParameterDirection.Input);
            var r4 = new OracleParameter("p_strEmpleado", OracleDbType.Char, strEmpleado, ParameterDirection.Input);
            var r5 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output);

            var parametros = new List<OracleParameter> { r1, r2, r3, r4, r5 };
            DataTable dt = oc.EjecutarSp<DataTable>("SP_ConsultaConsecutivoNovedad", parametros);
            return Convert.ToInt32(r5.Value.ToString());
        }

        public List<CLSNOVPRD> consultarNovedad(DateTime dtmFecha, int numSemana, string strProceso, string strEmpleado, string strEstado, string strCodCPT)
        {
            try
            {
                List<CLSNOVPRD> novedad = new List<CLSNOVPRD>();
                OracleConexion oc = new OracleConexion(baseDatos);  

                var r1 = new OracleParameter("p_numAno", OracleDbType.Int16, dtmFecha.Year, ParameterDirection.Input);
                var r2 = new OracleParameter("p_numSemana", OracleDbType.Int16, numSemana, ParameterDirection.Input);
                var r3 = new OracleParameter("p_strProceso", OracleDbType.Char, strProceso, ParameterDirection.Input);
                var r4 = new OracleParameter("p_strEmpleado", OracleDbType.Char, strEmpleado, ParameterDirection.Input);
                var r5 = new OracleParameter("p_strEstadoNovedad", OracleDbType.Char, strEstado, ParameterDirection.Input);
                var r6 = new OracleParameter("p_strCodigoCPT", OracleDbType.Char, strCodCPT, ParameterDirection.Input);
                var r7 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var parametros = new List<OracleParameter> { r1, r2, r3, r4, r5, r6, r7 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_ConsultaNovedad", parametros);

                CLSNOVPRD objNov = new CLSNOVPRD();
                foreach (DataRow dr in dt.Rows)
                {
                    objNov = new CLSNOVPRD();
                    objNov.ANO_NVP = Convert.ToInt16(dr["ANO_NVP"]);
                    objNov.SEM_NVP = Convert.ToInt16(dr["SEM_NVP"]);
                    objNov.CODPRC_NVP = dr["CODPRC_NVP"].ToString();
                    objNov.CODEMP_NVP = dr["CODEMP_NVP"].ToString();
                    objNov.CONSEC_NVP = Convert.ToInt16(dr["CONSEC_NVP"]);
                    objNov.TIPO_NVP = dr["TIPO_NVP"].ToString();
                    objNov.CONCEP_NVP = dr["CONCEP_NVP"].ToString();
                    objNov.concepto.NOMCPT_CPT = dr["CONCEP_NVP"].ToString();
                    objNov.VLRNOV_NVP = Convert.ToDouble(dr["VLRNOV_NVP"]);
                    objNov.ESTNOV_NVP = dr["ESTNOV_NVP"].ToString();
                    objNov.CODCPT_NVP = dr["CODCPT_NVP"].ToString();
                    objNov.concepto.CODCPT_CPT = dr["CODCPT_NVP"].ToString();

                    novedad.Add(objNov);
                }
                return novedad;
            }
            catch (Exception ex) { throw ex; }
        }

        public List<CLSREPPRO> consultarReporteProduccion(DateTime dtmFecha, int numSemana, string strProceso, string strEmpleado, string strEstado)
        {
            try
            {
                List<CLSREPPRO> novedad = new List<CLSREPPRO>();
                OracleConexion oc = new OracleConexion(baseDatos);

                var r1 = new OracleParameter("p_numAno", OracleDbType.Int16, dtmFecha.Year, ParameterDirection.Input);
                var r2 = new OracleParameter("p_numSemana", OracleDbType.Int16, numSemana, ParameterDirection.Input);
                var r3 = new OracleParameter("p_strProceso", OracleDbType.Char, strProceso, ParameterDirection.Input);
                var r4 = new OracleParameter("p_strEmpleado", OracleDbType.Varchar2, strEmpleado, ParameterDirection.Input);
                var r5 = new OracleParameter("p_strEstadoNovedad", OracleDbType.Char, strEstado, ParameterDirection.Input);
                var r6 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var parametros = new List<OracleParameter> { r1, r2, r3, r4, r5, r6 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_ConsultaRepProd", parametros);

                CLSREPPRO objNov = new CLSREPPRO();
                foreach (DataRow dr in dt.Rows)
                {
                    objNov = new CLSREPPRO();
                    objNov.ANO_RPP = Convert.ToInt16(dr["ANO_RPP"]);
                    objNov.SEM_RPP = Convert.ToInt16(dr["SEM_RPP"]);
                    objNov.referencia.NOMREF_REF = dr["STRREFERENCIA"].ToString().Trim();
                    objNov.color.NOMCOL_COL = dr["STRCOLOR"].ToString().Trim();
                    objNov.detalleOrdenes.CANORD_DOP = Convert.ToInt16(dr["CANORD_DOP"]);
                    objNov.CODPRC_RPP = dr["CODPRC_RPP"].ToString();
                    objNov.NROORD_RPP = dr["NROORD_RPP"].ToString().Trim();
                    objNov.CONSEC_RPP = Convert.ToInt16(dr["CONSEC_RPP"]);
                    objNov.FECREP_RPP = Convert.ToDateTime(dr["FECREP_RPP"]);
                    objNov.CODEMP_RPP = dr["CODEMP_RPP"].ToString();
                    objNov.CANREP_RPP = Convert.ToDouble(dr["CANREP_RPP"]);
                    objNov.PORCEN_RPP = Convert.ToDouble(dr["PORCEN_RPP"]);
                    objNov.VLRVLR_RPP = Convert.ToDouble(dr["VLRVLR_RPP"]);
                    objNov.VLRCTG_RPP = Convert.ToDouble(dr["VLRCTG_RPP"]);
                    objNov.ESTADO_RPP = dr["ESTADO_RPP"].ToString();
                    objNov.numConsecutivo = Convert.ToInt32(dr["CONSEC_RPP"]);

                    novedad.Add(objNov);
                }
                return novedad;
            }
            catch (Exception ex) { throw ex; }
        }
        
        public List<CLSREFCLCP> consultarReferenciasColeccion(CLSMAECLCP _coleccion) 
        {
            try 
            {
                List<CLSREFCLCP> lista = new List<CLSREFCLCP>();
                OracleConexion oc = new OracleConexion(baseDatos);  

                var r1 = new OracleParameter("p_strCodigo", OracleDbType.Varchar2, _coleccion.CODCLC_CLC, ParameterDirection.Input);
                var r2 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var parametros = new List<OracleParameter> { r1, r2 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_consultarRefsColeccion", parametros);

                CLSREFCLCP r;
                foreach (DataRow dr in dt.Rows) {
                 r=new CLSREFCLCP();
                 r.CODREF_RXC = dr["CODREF_RXC"].ToString();
                 r.referencia.CODREF_REF = dr["CODREF_RXC"].ToString();
                 r.referencia.NOMREF_REF = dr["NOMREF_REF"].ToString();
                 r.CODCOL_RXC = dr["CODCOL_RXC"].ToString();
                 r.referencia.infocol.CODCOL_COL = dr["CODCOL_RXC"].ToString();
                 r.referencia.infocol.NOMCOL_COL = dr["NOMCOL_COL"].ToString();
                 r.CODCLC_RXC = dr["CODCLC_RXC"].ToString();
                 lista.Add(r); 
                }

                 return lista;
            }
            catch (Exception ex) { throw ex; }
        }

        public List<CLSMAEREF> BuscarReferencia(CLSMAEREF _referencia) 
        {
            try 
            {

                List<CLSMAEREF> lista = new List<CLSMAEREF>();
                OracleConexion oc = new OracleConexion(baseDatos);  

                var r1 = new OracleParameter("p_strNombre", OracleDbType.Varchar2, _referencia.NOMREF_REF, ParameterDirection.Input);
                var r2 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var parametros = new List<OracleParameter> { r1, r2 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_BuscarReferencia", parametros);

                CLSMAEREF r;
                foreach (DataRow dr in dt.Rows)
                {
                    r = new CLSMAEREF();

                    r.CODREF_REF = dr["CODREF_REF"].ToString();
                    r.NOMREF_REF = dr["NOMREF_REF"].ToString();
                    r.infproveedor.NOMPRV_PRV = dr["NOMPRV_PRV"].ToString();
                  
                    lista.Add(r);
                }

                return lista;
            }
            catch (Exception ex) { throw ex; }
        }

        public List<CLSMAECOL> ConsultarColorReferencia(CLSMAEREF _referencia)
        {
            try
            {
                List<CLSMAECOL> lista = new List<CLSMAECOL>();
                OracleConexion oc = new OracleConexion(baseDatos);  

                var r1 = new OracleParameter("p_strCodigo", OracleDbType.Varchar2, _referencia.CODREF_REF, ParameterDirection.Input);
                var r2 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var parametros = new List<OracleParameter> { r1, r2 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_ConsultarColorReferencia", parametros);

                CLSMAECOL r;
                foreach (DataRow dr in dt.Rows)
                {
                    r = new CLSMAECOL();
                    r.CODCOL_COL = dr["CODCOL_PRO"].ToString();
                    r.NOMCOL_COL = dr["NOMCOL_COL"].ToString();
                    lista.Add(r);
                }

                return lista;
            }
            catch (Exception ex) { throw ex; }
        }

       
        public Boolean guardarColeccion(CLSMAECLCP _coleccion,List<CLSREFCLCP> _crear,List<CLSREFCLCP> _eliminar)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                StringWriter swStringWriter = new StringWriter();

                DataTable dt = toolsUtiles.ToDataTable(_crear);
                dt.TableName = "p_Crear";
                dt.WriteXml(swStringWriter);
                string x_Crear = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                dt = toolsUtiles.ToDataTable(_eliminar);
                dt.TableName = "p_Eliminar";
                dt.WriteXml(swStringWriter);
                string x_Eliminar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                var r1 = new OracleParameter("p_strColeccion", OracleDbType.Varchar2,_coleccion.CODCLC_CLC, ParameterDirection.Input);
                var r2 = new OracleParameter("p_strNombre", OracleDbType.Varchar2, _coleccion.NOMCLC_CLC ,ParameterDirection.Input);
                var r3 = new OracleParameter("p_strDescripcion", OracleDbType.Varchar2, _coleccion.DETALLE_CLC, ParameterDirection.Input);
                var r4 = new OracleParameter("p_Eliminar", OracleDbType.XmlType, x_Eliminar, ParameterDirection.Input);
                var r5 = new OracleParameter("p_Crear", OracleDbType.XmlType, x_Crear, ParameterDirection.Input);
                var r6 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r1, r2, r3, r4,r5,r6 };
                DataTable dtt = oc.EjecutarSp<DataTable>("SP_GuardarColeccionReferencias", parametros);

                return Convert.ToInt32(r6.Value.ToString()) == 1 ? true : false;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            return false;
        }

        public Boolean EliminarColeccion(CLSMAECLCP _coleccion)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                var r1 = new OracleParameter("p_strCodigo", OracleDbType.Varchar2, _coleccion.CODCLC_CLC, ParameterDirection.Input);
                var r2 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output);
                var parametros = new List<OracleParameter> { r1, r2};
                DataTable dtt = oc.EjecutarSp<DataTable>("SP_EliminarColeccion", parametros);

                return Convert.ToInt32(r2.Value.ToString()) == 1 ? true : false;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            return false;
        }

        // Mantenimeinto de secciones
        public Boolean guardarSeccion(List<CLSMAESEC> p_Actualizar, List<CLSMAESEC> p_Eliminar, List<CLSMAESEC> p_Agregar)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                StringWriter swStringWriter = new StringWriter();

                DataTable dt = toolsUtiles.ToDataTable(p_Actualizar);
                dt.TableName = "p_Actualizar";
                dt.WriteXml(swStringWriter);
                string x_Actualizar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                dt = toolsUtiles.ToDataTable(p_Eliminar);
                dt.TableName = "p_Eliminar";
                dt.WriteXml(swStringWriter);
                string x_Eliminar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                dt = toolsUtiles.ToDataTable(p_Agregar);
                dt.TableName = "p_Agregar";
                dt.WriteXml(swStringWriter);
                string x_Agregar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                var r1 = new OracleParameter("p_Actualizar", OracleDbType.XmlType, x_Actualizar, ParameterDirection.Input);
                var r2 = new OracleParameter("p_Eliminar", OracleDbType.XmlType, x_Eliminar, ParameterDirection.Input);
                var r3 = new OracleParameter("p_Agregar", OracleDbType.XmlType, x_Agregar, ParameterDirection.Input);
                var r4 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r1, r2, r3, r4 };
                DataTable dtt = oc.EjecutarSp<DataTable>("sp_GuardarSecciones", parametros);

                return Convert.ToInt32(r4.Value.ToString()) == 1 ? true : false;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            return false;
        }

        // Mantenimiento de conceptos de facturacion
        public Boolean guardarConceptosFac(List<CLSCCPFAC> p_Actualizar, List<CLSCCPFAC> p_Eliminar, List<CLSCCPFAC> p_Agregar)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                StringWriter swStringWriter = new StringWriter();

                DataTable dt = toolsUtiles.ToDataTable(p_Actualizar);
                dt.TableName = "p_Actualizar";
                dt.WriteXml(swStringWriter);
                string x_Actualizar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                dt = toolsUtiles.ToDataTable(p_Eliminar);
                dt.TableName = "p_Eliminar";
                dt.WriteXml(swStringWriter);
                string x_Eliminar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                dt = toolsUtiles.ToDataTable(p_Agregar);
                dt.TableName = "p_Agregar";
                dt.WriteXml(swStringWriter);
                string x_Agregar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                var r1 = new OracleParameter("p_Actualizar", OracleDbType.XmlType, x_Actualizar, ParameterDirection.Input);
                var r2 = new OracleParameter("p_Eliminar", OracleDbType.XmlType, x_Eliminar, ParameterDirection.Input);
                var r3 = new OracleParameter("p_Agregar", OracleDbType.XmlType, x_Agregar, ParameterDirection.Input);
                var r4 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r1, r2, r3, r4 };
                DataTable dtt = oc.EjecutarSp<DataTable>("sp_GuardarConceptosFac", parametros);

                return Convert.ToInt32(r4.Value.ToString()) == 1 ? true : false;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            return false;
        }

        // Mantenimiento de conceptos de facturacion
        public Boolean guardarDetalleExplosion(List<MExplosionMateriales.DetallePedido> p_Agregar)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);

                StringWriter swStringWriter = new StringWriter();

                DataTable dt = toolsUtiles.ToDataTable(p_Agregar);
                dt.TableName = "p_Agregar";
                dt.WriteXml(swStringWriter);
                string x_Agregar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                var r1 = new OracleParameter("p_Agregar", OracleDbType.XmlType, x_Agregar, ParameterDirection.Input);
                var r2 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r1, r2 };
                DataTable dtt = oc.EjecutarSp<DataTable>("SP_GrabarTemporalExplosion", parametros);

                return Convert.ToInt32(r2.Value.ToString()) == 1 ? true : false;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            return false;
        }

        // Mantenimiento de motivos de reparacion
        public Boolean guardarMotivosRep(List<CLSMOTREPP> p_Actualizar, List<CLSMOTREPP> p_Eliminar, List<CLSMOTREPP> p_Agregar)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);

                StringWriter swStringWriter = new StringWriter();

                DataTable dt = toolsUtiles.ToDataTable(p_Actualizar);
                dt.TableName = "p_Actualizar";
                dt.WriteXml(swStringWriter);
                string x_Actualizar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                dt = toolsUtiles.ToDataTable(p_Eliminar);
                dt.TableName = "p_Eliminar";
                dt.WriteXml(swStringWriter);
                string x_Eliminar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                dt = toolsUtiles.ToDataTable(p_Agregar);
                dt.TableName = "p_Agregar";
                dt.WriteXml(swStringWriter);
                string x_Agregar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                var r1 = new OracleParameter("p_Actualizar", OracleDbType.XmlType, x_Actualizar, ParameterDirection.Input);
                var r2 = new OracleParameter("p_Eliminar", OracleDbType.XmlType, x_Eliminar, ParameterDirection.Input);
                var r3 = new OracleParameter("p_Agregar", OracleDbType.XmlType, x_Agregar, ParameterDirection.Input);
                var r4 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r1, r2, r3, r4 };
                DataTable dtt = oc.EjecutarSp<DataTable>("sp_GuardarMotivosRep", parametros);

                return Convert.ToInt32(r4.Value.ToString()) == 1 ? true : false;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            return false;
        }

        // Mantenimeinto de controles
        public Boolean guardarControl(List<CLSCONTROLP> p_Actualizar, List<CLSCONTROLP> p_Eliminar, List<CLSCONTROLP> p_Agregar)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                StringWriter swStringWriter = new StringWriter();

                DataTable dt = toolsUtiles.ToDataTable(p_Actualizar);
                dt.TableName = "p_Actualizar";
                dt.WriteXml(swStringWriter);
                string x_Actualizar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                dt = toolsUtiles.ToDataTable(p_Eliminar);
                dt.TableName = "p_Eliminar";
                dt.WriteXml(swStringWriter);
                string x_Eliminar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                dt = toolsUtiles.ToDataTable(p_Agregar);
                dt.TableName = "p_Agregar";
                dt.WriteXml(swStringWriter);
                string x_Agregar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                var r1 = new OracleParameter("p_Actualizar", OracleDbType.XmlType, x_Actualizar, ParameterDirection.Input);
                var r2 = new OracleParameter("p_Eliminar", OracleDbType.XmlType, x_Eliminar, ParameterDirection.Input);
                var r3 = new OracleParameter("p_Agregar", OracleDbType.XmlType, x_Agregar, ParameterDirection.Input);
                var r4 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r1, r2, r3, r4 };
                DataTable dtt = oc.EjecutarSp<DataTable>("sp_GuardarControl", parametros);

                return Convert.ToInt32(r4.Value.ToString()) == 1 ? true : false;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            return false;
        }

        public DataTable consultar_OrdenOProcesoEspecial(string strValor) 
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                OracleParameter r1 = null, r2 = null;

                r1 = new OracleParameter("p_strValor", OracleDbType.Varchar2, strValor, ParameterDirection.Input);
                r2 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var pararametros = new List<OracleParameter> { r1, r2 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_ConsultarOrdenOProcEspe", pararametros);
                              
                return dt;
            }
            catch (Exception ex) { throw ex; }
        }

        public Int32 consultar_Pendiente(string strValor, string strProceso)
        {
            try
            {
                Int32 numResultado = 0;
                OracleConexion oc = new OracleConexion(baseDatos);

                OracleParameter r1 = null, r2 = null, r3 = null;

                r1 = new OracleParameter("p_strValor", OracleDbType.Varchar2, strValor, ParameterDirection.Input);
                r2 = new OracleParameter("p_strPrc", OracleDbType.Varchar2, strProceso, ParameterDirection.Input);
                r3 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var pararametros = new List<OracleParameter> { r1, r2, r3 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_ConsultarPendiente", pararametros);

                foreach (DataRow r in dt.Rows)
                {
                    numResultado = Convert.ToInt32(r["numPendiente"]);
                }

                return numResultado;
            }
            catch (Exception ex) { throw ex; }
        }

        public DataTable consultar_SiExisteOrdenReportada(string strOrden, string strProceso, Int32 numAño, Int32 numSemana, out Int32 numTotRep)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                var r1 = new OracleParameter("p_strOrden", OracleDbType.Varchar2, strOrden, ParameterDirection.Input);
                var r2 = new OracleParameter("p_strProceso", OracleDbType.Varchar2, strProceso, ParameterDirection.Input);
                var r3 = new OracleParameter("p_numAno", OracleDbType.Int32, numAño, ParameterDirection.Input);
                var r4 = new OracleParameter("p_numSemana", OracleDbType.Int32, numSemana, ParameterDirection.Input);
                var r5 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output);
                var r6 = new OracleParameter("p_ResultSet2", OracleDbType.RefCursor, ParameterDirection.Output);
                var pararametros = new List<OracleParameter> { r1, r2, r3, r4, r5, r6 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_ConsultarOrdenReportada", pararametros);

                numTotRep = Convert.ToInt32(r3.Value.ToString());

                return dt;                
            }
            catch (Exception ex) { throw ex; }
        }

        public Boolean guardarReportesDeProduccion(DateTime dtmFecha, int numSemana, string strProceso, List<CLSMAEEMPP> p_Empleados, string strEstado, string strReporta,
                List<CLSREPPRO> p_Actualizar, List<CLSREPPRO> p_Eliminar, List<CLSREPPRO> p_Agregar)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                StringWriter swStringWriter = new StringWriter();

                DataTable dt = toolsUtiles.ToDataTable(p_Actualizar);
                dt.TableName = "p_Actualizar";
                dt.WriteXml(swStringWriter);
                string x_Actualizar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                dt = toolsUtiles.ToDataTable(p_Eliminar);
                dt.TableName = "p_Eliminar";
                dt.WriteXml(swStringWriter);
                string x_Eliminar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                dt = toolsUtiles.ToDataTable(p_Agregar);
                dt.TableName = "p_Agregar";
                dt.WriteXml(swStringWriter);
                string x_Agregar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                dt = toolsUtiles.ToDataTable(p_Empleados);
                dt.TableName = "p_Empleados";
                dt.WriteXml(swStringWriter);
                string x_Empleados = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                var r1 = new OracleParameter("p_numAno", OracleDbType.Int16, dtmFecha.Year, ParameterDirection.Input);
                var r2 = new OracleParameter("p_numSemana", OracleDbType.Int16, numSemana, ParameterDirection.Input);
                var r3 = new OracleParameter("p_strProceso", OracleDbType.Char, strProceso, ParameterDirection.Input);
                var r4 = new OracleParameter("p_Empleados", OracleDbType.XmlType, x_Empleados, ParameterDirection.Input);
                var r5 = new OracleParameter("p_strEstadoReporte", OracleDbType.Char, strEstado, ParameterDirection.Input);
                var r6 = new OracleParameter("p_strReporta", OracleDbType.Char, strReporta, ParameterDirection.Input);

                var r7 = new OracleParameter("p_Actualizar", OracleDbType.XmlType, x_Actualizar, ParameterDirection.Input);
                var r8 = new OracleParameter("p_Eliminar", OracleDbType.XmlType, x_Eliminar, ParameterDirection.Input);
                var r9 = new OracleParameter("p_Agregar", OracleDbType.XmlType, x_Agregar, ParameterDirection.Input);
                var r10 = new OracleParameter("p_numResultado", OracleDbType.Int16, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r1, r2, r3, r4, r5, r6, r7, r8, r9, r10 };
                DataTable dtt = oc.EjecutarSp<DataTable>("SP_GUARDARREPTESDEPRODUCCION", parametros);

                return Convert.ToInt16(r10.Value.ToString()) == 1 ? true : false;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }

            return false;
        }

        public DataTable consultarDetalleOrden(string strNroOrden)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                var r1 = new OracleParameter("pva_nroord", OracleDbType.Varchar2, strNroOrden, ParameterDirection.Input);
                var r2 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var parametros = new List<OracleParameter> { r1, r2 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_TABDETORD", parametros);

                return dt;
            }
            catch (Exception ex) { throw ex; }
        }

        public DataTable consultarCodigoFactVar(string strCodigo, string strCodCli)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);  

                var r1 = new OracleParameter("p_strCodigo", OracleDbType.Varchar2, strCodigo.Trim(), ParameterDirection.Input);
                var r2 = new OracleParameter("p_strCodCli", OracleDbType.Varchar2, strCodCli.Trim(), ParameterDirection.Input);
                var r3 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var parametros = new List<OracleParameter> { r1, r2, r3 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_CONSULTACODIGOFACVAR", parametros);

                return dt;
            }
            catch (Exception ex) { throw ex; }
        }

        public List<MAudOrd> consultarAuditoriaOrdenes(string strCodigoCliente, string strCodigoReferencia, DateTime dtmFechaInicial, DateTime dtmFechaFinal)
        {
            try
            {
                List<MAudOrd> LisAudOrd = new List<MAudOrd>();
                OracleConexion oc = new OracleConexion(baseDatos);  

                var r2 = new OracleParameter("StrCodigoCliente", OracleDbType.Varchar2, strCodigoCliente == null ? "" : strCodigoCliente, ParameterDirection.Input);
                var r3 = new OracleParameter("StrCodigoReferencia", OracleDbType.Varchar2, strCodigoReferencia == "" ? null : strCodigoReferencia, ParameterDirection.Input);
                var r4 = new OracleParameter("StrFechaDesde", OracleDbType.Varchar2, dtmFechaInicial == null ? "" : dtmFechaInicial.ToString("dd/MM/yy"), ParameterDirection.Input);
                var r5 = new OracleParameter("StrFechaHasta", OracleDbType.Varchar2, dtmFechaFinal == null ? "" : dtmFechaFinal.ToString("dd/MM/yy"), ParameterDirection.Input);
                var r6 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r2, r3, r4, r5, r6 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_AUDORD", parametros);

                MAudOrd objAudOrd = new MAudOrd();
                foreach (DataRow dr in dt.Rows)
                {
                    objAudOrd = new MAudOrd();
                    objAudOrd.FECORD_EOP = Convert.ToDateTime(dr["FECORD_EOP"]);
                    objAudOrd.CODCLI_EOP = dr["CODCLI_EOP"].ToString();
                    objAudOrd.NOMCLI_CLI = dr["NOMCLI_CLI"].ToString();
                    objAudOrd.NROPED_EOP =Convert.ToInt32(dr["NROPED_EOP"]);
                    objAudOrd.NROORD_DOP = dr["NROORD_DOP"].ToString();
                    objAudOrd.CODREF_DOP = dr["CODREF_DOP"].ToString();
                    objAudOrd.NOMREF_REF = dr["NOMREF_REF"].ToString();
                    objAudOrd.CODCOL_DOP = dr["CODCOL_DOP"].ToString();
                    objAudOrd.NOMCOL_COL = dr["NOMCOL_COL"].ToString();
                    objAudOrd.CODTAL_DOP = dr["CODTAL_DOP"].ToString();
                    objAudOrd.CANORD_DOP = Convert.ToInt32(dr["CANORD_DOP"]);
                    objAudOrd.CANCOR_DOP = Convert.ToInt32(dr["CANCOR_DOP"]);
                    objAudOrd.CANGUA_DOP = Convert.ToInt32(dr["CANGUA_DOP"]);
                    objAudOrd.CANMON_DOP = Convert.ToInt32(dr["CANMON_DOP"]);
                    objAudOrd.CANDES_DOP = Convert.ToInt32(dr["CANDES_DOP"]);
                    objAudOrd.CANPRP_DOP = Convert.ToInt32(dr["CANPRP_DOP"]);
                    objAudOrd.CANPRG_DOP = Convert.ToInt32(dr["CANPRG_DOP"]);
                    objAudOrd.PND = Convert.ToInt32(dr["PND"]);

                    LisAudOrd.Add(objAudOrd);
                }

                return LisAudOrd;
            }
            catch (Exception ex) { throw ex; }
        }
        public List<MCumplimientoPedidos> consultarCumplimientoPedidos(string strCodigoCliente, string strCodigoReferencia, DateTime dtmFechaInicial, DateTime dtmFechaFinal)
        {
            try
            {
                List<MCumplimientoPedidos> LisCumplimientoPedidos = new List<MCumplimientoPedidos>();
                OracleConexion oc = new OracleConexion(baseDatos);  

                var r2 = new OracleParameter("StrCodigoCliente", OracleDbType.Varchar2, strCodigoCliente == null ? "" : strCodigoCliente, ParameterDirection.Input);
                var r3 = new OracleParameter("StrCodigoReferencia", OracleDbType.Varchar2, strCodigoReferencia == "" ? null : strCodigoReferencia, ParameterDirection.Input);
                var r4 = new OracleParameter("StrFechaDesde", OracleDbType.Varchar2, dtmFechaInicial == null ? "" : dtmFechaInicial.ToString("ddMMyyyy"), ParameterDirection.Input);
                var r5 = new OracleParameter("StrFechaHasta", OracleDbType.Varchar2, dtmFechaFinal == null ? "" : dtmFechaFinal.ToString("ddMMyyyy"), ParameterDirection.Input);
                var r6 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r2, r3, r4, r5, r6 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_InfCumPed", parametros);

                MCumplimientoPedidos objCumplimientoPedidos = new MCumplimientoPedidos();

                foreach (DataRow dr in dt.Rows)
                {
                    objCumplimientoPedidos = new MCumplimientoPedidos();

                    //FJRF - 1. CODIGO DEL CLIENTE
                    objCumplimientoPedidos.CODCLI_EOP = dr["CODCLI_TMP"].ToString();
                    //FJRF - 2. NOMBRE DEL CLIENTE
                    objCumplimientoPedidos.NOMCLI_CLI = dr["NOMCLI_TMP"].ToString();
                    //FJRF - 3. NUMERO DE PEDIDO
                    objCumplimientoPedidos.NROPED_EOP = Convert.ToInt32(dr["NROPED_TMP"]);
                    //FJRF - 4. NUMERO ORDEN
                    objCumplimientoPedidos.NROORD_DOP = dr["NROORI_TMP"].ToString();
                    //FJRF - 5. FECHA PEDIDO
                    objCumplimientoPedidos.FECPED_TMP = PrivStr_RetornarFechaTipoString(dr["FECPED_TMP"].ToString());
                    //FJRF - 6. FECHA ENTREGA
                    objCumplimientoPedidos.FECENT_TMP = PrivStr_RetornarFechaTipoString(dr["FECENT_TMP"].ToString());
                    //FJRF - 7. DIAS
                    objCumplimientoPedidos.DIAS = dr["DIAS_TMP"] == null ? 0 : Convert.ToInt32(dr["DIAS_TMP"]);
                    //FJRF - 8. CODIGO REFERENCIA
                    objCumplimientoPedidos.CODREF_DOP = dr["CODREF_TMP"].ToString();
                    //FJRF - 9. CODIGO COLOR
                    objCumplimientoPedidos.CODCOL_DOP = dr["CODCOL_TMP"].ToString();
                    //FJRF - 10. NOMBRE DE LA REFERENCIA
                    objCumplimientoPedidos.NOMREF_REF = dr["NOMREF_TMP"].ToString();
                    //FJRF - 11. NOMBRE DEL COLOR
                    objCumplimientoPedidos.NOMCOL_COL = dr["NOMCOL_TMP"].ToString();
                    //FJRF - 12. CANTIDAD PEDIDA
                    objCumplimientoPedidos.CANPED = Convert.ToInt32(dr["CANPED_TMP"]);
                    //FJRF - 13. CANTIDAD ENTREGADA
                    objCumplimientoPedidos.CANENT = Convert.ToInt32(dr["CANENT_TMP"]);
                    //FJRF - 14. CANTIDAD PENDIENTE
                    objCumplimientoPedidos.CANPEN = Convert.ToInt32(dr["CANPEN_TMP"]);
                    //FJRF - 15. FECHA ULTIMA ENTREGA
                    objCumplimientoPedidos.ULTENT_TMP = PrivStr_RetornarFechaTipoString(dr["ULTENT_TMP"].ToString());
                    //FJRF - 16. CALIFICACION
                    objCumplimientoPedidos.CALIF = dr["CALIF_TMP"].ToString();
                    //FJRF - 17. ORDEN DE LOS CAMPOS
                    objCumplimientoPedidos.ORDEN = Convert.ToInt32(dr["ORDEN_TMP"]);

                    LisCumplimientoPedidos.Add(objCumplimientoPedidos);
                }
                return LisCumplimientoPedidos;
            }
            catch (Exception ex) 
            { 
                throw ex; 
            }
        }
        public List<MCumplimientoEntregaPedidos> consultarCumplimientoEntregaPedidos(Int32 IntAño, string strCodigoClienteInicial, string strCodigoClienteFinal)
        {
            int IntError = 0;
            try
            {
                List<MCumplimientoEntregaPedidos> LisCumplimientoEntregaPedidos = new List<MCumplimientoEntregaPedidos>();
                OracleConexion oc = new OracleConexion(baseDatos);  

                var r1 = new OracleParameter("PNU_ANO", OracleDbType.Int32, IntAño, ParameterDirection.Input);
                var r2 = new OracleParameter("PVA_CLIINI", OracleDbType.Varchar2, strCodigoClienteInicial == null ? "" : strCodigoClienteInicial, ParameterDirection.Input);
                var r3 = new OracleParameter("PVA_CLIFIN", OracleDbType.Varchar2, strCodigoClienteFinal == null ? "" : strCodigoClienteFinal, ParameterDirection.Input);
                var r4 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r1, r2, r3, r4 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_RESCUMPEDMES", parametros);

                MCumplimientoEntregaPedidos objCumplimientoEntregaPedidos = new MCumplimientoEntregaPedidos();
                
                foreach (DataRow dr in dt.Rows)
                {
                    IntError++;

                    objCumplimientoEntregaPedidos = new MCumplimientoEntregaPedidos();
                    //FJRF - 1. TIPO: ES EL TIPO DE CONSULTA QUE TIENE LA TABLA EJEMPLO POR MES
                    objCumplimientoEntregaPedidos.TIPO_TMP = dr["TIPO_TMP"] == null ? "" : dr["TIPO_TMP"].ToString();
                    //FJRF - 2. CODIGO DEL CLIENTE
                    objCumplimientoEntregaPedidos.CODCLI_TMP = dr["CODCLI_TMP"] == null ? "" : dr["CODCLI_TMP"].ToString();
                    //FJRF - 3. NUMERO DE PEDIDO
                    objCumplimientoEntregaPedidos.NROPED_TMP = dr["NROPED_TMP"] == null ? 0 : Convert.ToInt32(dr["NROPED_TMP"]);
                    //FJRF - 4. NOMBRE DEL CLIENTE
                    objCumplimientoEntregaPedidos.NOMCLI_CLI = dr["NOMCLI_CLI"] == null ? "" : dr["NOMCLI_CLI"].ToString();
                    //FJRF - 5. FECHA PEDIDO
                    objCumplimientoEntregaPedidos.FECPED_TMP = dr["FECPED_TMP"] == null ? "" : PrivStr_RetornarFechaTipoString(dr["FECPED_TMP"].ToString());
                    //FJRF - 6. FECHA ENTREGA
                    objCumplimientoEntregaPedidos.FECENT_TMP = dr["FECENT_TMP"] == null ? "" : PrivStr_RetornarFechaTipoString(dr["FECENT_TMP"].ToString());
                    //FJRF - 7. CANTIDAD TOTAL
                    objCumplimientoEntregaPedidos.CANTOT_TMP = dr["CANTOT_TMP"] == null ? 0 : Convert.ToInt32(dr["CANTOT_TMP"]);
                    //FJRF - 8. CANTIDAD ACUMULADA
                    objCumplimientoEntregaPedidos.CANCUM_TMP = dr["CANCUM_TMP"] == null ? 0 : Convert.ToInt32(dr["CANCUM_TMP"]);
                    //FJRF - 9. CANTIDAD INCUMPLIDA
                    objCumplimientoEntregaPedidos.CANINC_TMP = dr["CANINC_TMP"] == null ? 0 : Convert.ToInt32(dr["CANINC_TMP"]);
                    //FJRF - 10. PORCENTAJE CUMPLIMIENTO
                    objCumplimientoEntregaPedidos.PORCUM_TMP = dr["PORCUM_TMP"] == null ? 0 : Convert.ToDouble(dr["PORCUM_TMP"]);
                    //FJRF - 11. PORCENTAJE INCUMPLIDO
                    objCumplimientoEntregaPedidos.PORINC_TMP = dr["PORINC_TMP"] == null ? 0 : Convert.ToDouble(dr["PORINC_TMP"]);

                    LisCumplimientoEntregaPedidos.Add(objCumplimientoEntregaPedidos);
                }
                return LisCumplimientoEntregaPedidos;
            }
            catch (Exception ex)
            {
                String Mensaje = IntError.ToString();
                throw ex;
            }
        }
        public List<MRelacionGeneralAjustes> consultarRelacionGeneralAjustes(DateTime dtmFechaInicial, DateTime dtmFechaFinal, string strMateriaPrimaInicial, string strMateriaPrimaFinal)
        {
            int IntError = 0;
            try
            {
                List<MRelacionGeneralAjustes> LisRelacionGeneralAjustes = new List<MRelacionGeneralAjustes>();
                OracleConexion oc = new OracleConexion(baseDatos);  

                var varParametro1 = new OracleParameter("pdt_desde", OracleDbType.Varchar2, dtmFechaInicial == null ? "" : dtmFechaInicial.ToString("ddMMyyyy"), ParameterDirection.Input);
                var varParametro2 = new OracleParameter("pdt_hasta", OracleDbType.Varchar2, dtmFechaFinal == null ? "" : dtmFechaFinal.ToString("ddMMyyyy"), ParameterDirection.Input);
                var varParametro3 = new OracleParameter("pva_mtpini", OracleDbType.Varchar2, strMateriaPrimaInicial == null ? "" : strMateriaPrimaInicial, ParameterDirection.Input);
                var varParametro4 = new OracleParameter("pva_mtpfin", OracleDbType.Varchar2, strMateriaPrimaFinal == null ? "" : strMateriaPrimaFinal, ParameterDirection.Input);

                var varParametroResultado = new OracleParameter("p_resultset", OracleDbType.RefCursor, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { varParametro1, varParametro2, varParametro3, varParametro4, varParametroResultado };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_INFGENAJU", parametros);

                MRelacionGeneralAjustes objRelacionGeneralAjustes = new MRelacionGeneralAjustes();

                foreach (DataRow dr in dt.Rows)
                {
                    IntError++;

                    objRelacionGeneralAjustes = new MRelacionGeneralAjustes();
                    //FJRF - 1. Codigo Materia Prima
                    objRelacionGeneralAjustes.CODMTP_TMP = dr["CODMTP_TMP"] == null ? "" : dr["CODMTP_TMP"].ToString();
                    //FJRF - 2. Fecha
                    objRelacionGeneralAjustes.strFECHA_TMP = dr["FECHA_TMP"] == null ? "" : PrivStr_RetornarFechaTipoString(dr["FECHA_TMP"].ToString());
                    //FJRF - 3. Hoja número
                    objRelacionGeneralAjustes.HOJNRO_TMP = dr["HOJNRO_TMP"] == null ? "" : dr["HOJNRO_TMP"].ToString();
                    //FJRF - 4. Nombre material
                    objRelacionGeneralAjustes.NOMMAT_TMP = dr["NOMMAT_TMP"] == null ? "" : dr["NOMMAT_TMP"].ToString();
                    //FJRF - 5. Entradas
                    objRelacionGeneralAjustes.ENTRA_TMP = dr["ENTRA_TMP"] == null ? 0 : Convert.ToInt32(dr["ENTRA_TMP"]);
                    //FJRF - 6. Sale
                    objRelacionGeneralAjustes.SALE_TMP = dr["SALE_TMP"] == null ? 0 : Convert.ToInt32(dr["SALE_TMP"]);
                    //FJRF - 7. Costo unitario
                    objRelacionGeneralAjustes.COSTOT_TMP = dr["COSTOT_TMP"] == null ? 0 : Convert.ToInt32(dr["COSTOT_TMP"]);

                    LisRelacionGeneralAjustes.Add(objRelacionGeneralAjustes);
                }
                return LisRelacionGeneralAjustes;
            }
            catch (Exception ex)
            {
                String Mensaje = IntError.ToString();
                throw ex;
            }
        }

        public List<MInformeLineaProduccion> consultarInformeLineaProduccion(string strpva_seccion, string strpva_linini, string strpva_linfin, string strpva_sepcli, string strpva_sepped, string strpva_sepref, string strpva_cliini, string strpva_clifin, string strpva_tipo)
        {
            int IntError = 0;
            try
            {
                List<MInformeLineaProduccion> LisInformeLineaProduccion = new List<MInformeLineaProduccion>();
                OracleConexion oc = new OracleConexion(baseDatos);  

                var varParametro1 = new OracleParameter("pva_seccion", OracleDbType.Varchar2, strpva_seccion == null ? "" : strpva_seccion, ParameterDirection.Input);
                var varParametro2 = new OracleParameter("pva_linini", OracleDbType.Varchar2, strpva_linini == null ? "" : strpva_linini, ParameterDirection.Input);
                var varParametro3 = new OracleParameter("pva_linfin", OracleDbType.Varchar2, strpva_linfin == null ? "" : strpva_linfin, ParameterDirection.Input);
                var varParametro4 = new OracleParameter("pva_sepcli", OracleDbType.Varchar2, strpva_sepcli == null ? "" : strpva_sepcli, ParameterDirection.Input);
                var varParametro5 = new OracleParameter("pva_sepped", OracleDbType.Varchar2, strpva_sepped == null ? "" : strpva_sepped, ParameterDirection.Input);
                var varParametro6 = new OracleParameter("pva_sepref", OracleDbType.Varchar2, strpva_sepref == null ? "" : strpva_sepref, ParameterDirection.Input);
                var varParametro7 = new OracleParameter("pva_cliini", OracleDbType.Varchar2, strpva_cliini == null ? "" : strpva_cliini, ParameterDirection.Input);
                var varParametro8 = new OracleParameter("pva_clifin", OracleDbType.Varchar2, strpva_clifin == null ? "" : strpva_clifin, ParameterDirection.Input);
                var varParametro9 = new OracleParameter("pva_tipo", OracleDbType.Varchar2, strpva_tipo == null ? "" : strpva_tipo, ParameterDirection.Input);

                var varParametroResultado = new OracleParameter("p_resultset", OracleDbType.RefCursor, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { varParametro1, varParametro2, varParametro3, varParametro4, varParametro5, varParametro6, varParametro7, varParametro8, varParametro9, varParametroResultado };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_INFLINPRD", parametros);

                MInformeLineaProduccion objInformeLineaProduccion = new MInformeLineaProduccion();

                foreach (DataRow dr in dt.Rows)
                {
                    IntError++;
                    objInformeLineaProduccion = new MInformeLineaProduccion();

                    //FJRF - 01. Codigo linea
                    objInformeLineaProduccion.CODLIN_TMP = dr["CODLIN_TMP"] == null ? "" : dr["CODLIN_TMP"].ToString();
                    //FJRF - 02. Nombre linea
                    objInformeLineaProduccion.NOMLIN_TMP = dr["NOMLIN_TMP"] == null ? "" : dr["NOMLIN_TMP"].ToString();
                    //FJRF - 03. Codigo cliente
                    objInformeLineaProduccion.CODCLI_TMP = dr["CODCLI_TMP"] == null ? "" : dr["CODCLI_TMP"].ToString();
                    //FJRF - 04. Nombre cliente
                    objInformeLineaProduccion.NOMCLI_TMP = dr["NOMCLI_TMP"] == null ? "" : dr["NOMCLI_TMP"].ToString();
                    //FJRF - 05. Numero pedido
                    objInformeLineaProduccion.NROPED_TMP = dr["NROPED_TMP"] == null ? 0 : Convert.ToInt32(dr["NROPED_TMP"]);
                    //FJRF - 06. Numero original
                    objInformeLineaProduccion.NROORI_TMP = dr["NROORI_TMP"] == null ? "" : dr["NROORI_TMP"].ToString();
                    //FJRF - 07. Fecha pedido
                    objInformeLineaProduccion.strFECPED_TMP = dr["FECPED_TMP"] == null ? "" : PrivStr_RetornarFechaTipoString(dr["FECPED_TMP"].ToString());
                    //FJRF - 08. Fecha vencimiento
                    objInformeLineaProduccion.strFECVTO_TMP = dr["FECVTO_TMP"] == null ? "" : PrivStr_RetornarFechaTipoString(dr["FECVTO_TMP"].ToString());
                    //FJRF - 09. Cantidad pedida
                    objInformeLineaProduccion.CANPED_TMP = dr["CANPED_TMP"] == null ? 0 : Convert.ToInt32(dr["CANPED_TMP"]);
                    //FJRF - 10. Cantidad pendiente   
                    objInformeLineaProduccion.CANPEN_TMP = dr["CANPEN_TMP"] == null ? 0 : Convert.ToInt32(dr["CANPEN_TMP"]);
                    //FJRF - 11. Valor
                    objInformeLineaProduccion.VALOR_TMP = dr["VALOR_TMP"] == null ? 0 : Convert.ToDouble(dr["VALOR_TMP"]);
                    //FJRF - 12. Codigo referencia
                    objInformeLineaProduccion.CODREF_TMP = dr["CODREF_TMP"] == null ? "" : dr["CODREF_TMP"].ToString();
                    //FJRF - 13. Codigo color
                    objInformeLineaProduccion.CODCOL_TMP = dr["CODCOL_TMP"] == null ? "" : dr["CODCOL_TMP"].ToString();
                    //FJRF - 14. Nombre referencia
                    objInformeLineaProduccion.NOMREF_TMP = dr["NOMREF_TMP"] == null ? "" : dr["NOMREF_TMP"].ToString();
                    //FJRF - 15. Nombre color
                    objInformeLineaProduccion.NOMCOL_TMP = dr["NOMCOL_TMP"] == null ? "" : dr["NOMCOL_TMP"].ToString();

                    LisInformeLineaProduccion.Add(objInformeLineaProduccion);
                }
                return LisInformeLineaProduccion;
            }
            catch (Exception ex)
            {
                String Mensaje = IntError.ToString();
                throw ex;
            }
        }

        // Guardar Precios
        public Boolean guardarPrecios(List<CLSLISPREP> p_Actualizar, List<CLSLISPREP> p_Eliminar, List<CLSLISPREP> p_Agregar)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);

                StringWriter swStringWriter = new StringWriter();

                DataTable dt = toolsUtiles.ToDataTable(p_Actualizar);
                dt.TableName = "p_Actualizar";
                dt.WriteXml(swStringWriter);
                string x_Actualizar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                dt = toolsUtiles.ToDataTable(p_Eliminar);
                dt.TableName = "p_Eliminar";
                dt.WriteXml(swStringWriter);
                string x_Eliminar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                dt = toolsUtiles.ToDataTable(p_Agregar);
                dt.TableName = "p_Agregar";
                dt.WriteXml(swStringWriter);
                string x_Agregar = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                var r1 = new OracleParameter("p_Actualizar", OracleDbType.XmlType, x_Actualizar, ParameterDirection.Input);
                var r2 = new OracleParameter("p_Eliminar", OracleDbType.XmlType, x_Eliminar, ParameterDirection.Input);
                var r3 = new OracleParameter("p_Agregar", OracleDbType.XmlType, x_Agregar, ParameterDirection.Input);
                var r4 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r1, r2, r3, r4 };
                DataTable dtt = oc.EjecutarSp<DataTable>("SP_GuardarPrecios", parametros);

                return Convert.ToInt32(r4.Value.ToString()) == 1 ? true : false;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            return false;
        }

        //Consulta la tabla para generar las graficas
        public void consultaGraficas(List<MGraficas> tablero, string strGrafico)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);

                var r1 = new OracleParameter("pva_ind", OracleDbType.Varchar2, strGrafico, ParameterDirection.Input);
                var r2 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var pararametros = new List<OracleParameter> { r1, r2 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_Tablerop", pararametros);

                tablero.Clear();
                foreach (DataRow r in dt.Rows)
                {
                    tablero.Add(new MGraficas
                    {
                        strInforme = r["CUADRO_TMP"].ToString(),
                        strLinea = r["LINEA_TMP"].ToString(),
                        strTitulo = r["TITULO_TMP"].ToString(),
                        strTitulo1 = r["TITULO1_TMP"].ToString(),
                        strTitulo2 = r["TITULO2_TMP"].ToString(),
                        numValor1 = Convert.ToInt32(r["CANT1_TMP"]),
                        numValor2 = Convert.ToInt32(r["CANT2_TMP"]),
                        strNombre = r["NOMBRE_TMP"].ToString()
                    });
                }
            }
            catch (Exception ex) { throw ex; }
        }

        public DataTable consultarPedidoExplosionM(string strPedido)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);

                var r1 = new OracleParameter("p_strPedido", OracleDbType.Varchar2, strPedido, ParameterDirection.Input);
                var r2 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var parametros = new List<OracleParameter> { r1, r2 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_ConsultaPedidoExplosionM", parametros);

                return dt;
            }
            catch (Exception ex) { throw ex; }
        }

        public DataTable consultarDetallePedidoExplosionM(string strCliente, Int32 strPedido)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);

                var r1 = new OracleParameter("pva_codcli", OracleDbType.Varchar2, strCliente, ParameterDirection.Input);
                var r2 = new OracleParameter("pnu_nroped", OracleDbType.Varchar2, strPedido, ParameterDirection.Input);
                var r3 = new OracleParameter("pva_resul", OracleDbType.Varchar2, 200, "",  ParameterDirection.Output);
                var r4 = new OracleParameter("pva_errusu", OracleDbType.Varchar2, 200, "", ParameterDirection.Output);
                var r5 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var parametros = new List<OracleParameter> { r1, r2, r3, r4, r5 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_PEDCLISINSTA", parametros);

                return dt;
            }
            catch (Exception ex) { throw ex; }
        }

        public List<MExplosionMateriales.ExplosiondeMateriales> consultaExplosionM(string strPedidos, string strGrupo, string strSubgrupo, Boolean logSustitutos, string strConcepto, out Int32 numExplosion)
        {
            try
            {
                List<MExplosionMateriales.ExplosiondeMateriales> lisExplosion = new List<MExplosionMateriales.ExplosiondeMateriales>();
                OracleConexion oc = new OracleConexion(baseDatos);

                var r1 = new OracleParameter("pva_codgrp", OracleDbType.Varchar2, strGrupo, ParameterDirection.Input);
                var r2 = new OracleParameter("pva_codsub", OracleDbType.Varchar2, strSubgrupo, ParameterDirection.Input);
                var r3 = new OracleParameter("pva_sustit", OracleDbType.Varchar2, logSustitutos == true ? "S" : "N", ParameterDirection.Input);
                var r4 = new OracleParameter("pva_concep", OracleDbType.Varchar2, strConcepto, ParameterDirection.Input);
                var r5 = new OracleParameter("pva_result", OracleDbType.Varchar2, ParameterDirection.Output);
                var r6 = new OracleParameter("pva_errusu", OracleDbType.Varchar2, ParameterDirection.Output);
                var r7 = new OracleParameter("pnu_nroexp", OracleDbType.Int32, ParameterDirection.Output);
                var r8 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var parametros = new List<OracleParameter> { r1, r2, r3, r4, r5, r6, r7, r8 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_EXPMAT", parametros);

                MDOgeneral.DtExplosiondeMateriales = new DataTable();//FJRF - Limpiamos el dt
                MDOgeneral.DtExplosiondeMateriales = dt.Copy();//FJRF - Sacamos una copia de los datos de la explosion de materiales

                numExplosion = Convert.ToInt32(r7.Value.ToString());

                foreach (DataRow dr in dt.Rows)
                {
                    MExplosionMateriales.ExplosiondeMateriales objExplosion = new MExplosionMateriales.ExplosiondeMateriales();
                    objExplosion.strCodigoProveedor = dr["CODPRV_TMP"].ToString();
                    objExplosion.strCodigoMaterial = dr["CODMAT_TMP"].ToString();
                    objExplosion.strCodigoColor = dr["CODCOL_TMP"].ToString();
                    objExplosion.strNombreProveedor = dr["NOMPRV_TMP"].ToString();
                    objExplosion.strNombreMaterial = dr["NOMMAT_TMP"].ToString();
                    objExplosion.strNombreColor = dr["NOMCOL_TMP"].ToString();
                    objExplosion.numCantidadRequerida = Convert.ToDouble(dr["CANREQ_TMP"]);
                    objExplosion.numCantidadExistente = Convert.ToDouble(dr["CANEXI_TMP"]);
                    objExplosion.numCantidadReservada = Convert.ToDouble(dr["CANRES_TMP"]);
                    objExplosion.numCantidadaPedir = Convert.ToDouble(dr["CANPED_TMP"]);
                    objExplosion.strTipoMaterial = dr["TIPMAT_TMP"].ToString();
                    objExplosion.numCostoMaterial = Convert.ToDouble(dr["COSMAT_TMP"]);
                    objExplosion.numCantidadPendiente = Convert.ToDouble(dr["CANPEN_TMP"]);

                    lisExplosion.Add(objExplosion);
                }

                return lisExplosion;
            }
            catch (Exception ex) { throw ex; }
        }

        public Boolean reversarExplosionM(Int32 numExplosion)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);

                var r1 = new OracleParameter("pva_concep", OracleDbType.Int32, numExplosion, ParameterDirection.Input);
                var r2 = new OracleParameter("pva_result", OracleDbType.Varchar2, ParameterDirection.Output);
                var r3 = new OracleParameter("pva_errusu", OracleDbType.Varchar2, ParameterDirection.Output);
                var parametros = new List<OracleParameter> { r1, r2, r3 };
                DataTable dt1 = oc.EjecutarSp<DataTable>("SP_EXPMATREV", parametros);

                return true;
            }
            catch (Exception ex) { throw ex; }
        }

        public int ConsultaEstadoPedidos()
        {
            try
            {
                MDOgeneral mod = new MDOgeneral();
                int numCantidad = 0;
                string query = "select nvl(count(*),0) as cantidad  from encpprp where estped_epp='p'";
                numCantidad = Convert.ToInt32(mod.consulta(query).Rows[0][0]);

                return numCantidad;
            }
            catch (Exception ex) { throw ex; }
        }

        public DataTable consultarDevolucionesPendientes(string strCliente, string strTipo)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);

                var r1 = new OracleParameter("pva_codcli", OracleDbType.Varchar2, 20, strCliente, ParameterDirection.Input);
                var r2 = new OracleParameter("pva_tipo", OracleDbType.Varchar2, 20, strTipo, ParameterDirection.Input);
                var r3 = new OracleParameter("pva_resul", OracleDbType.Varchar2, 200, "", ParameterDirection.Output);
                var r4 = new OracleParameter("pva_errusu", OracleDbType.Varchar2, 200, "", ParameterDirection.Output);
                var r5 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var parametros = new List<OracleParameter> { r1, r2, r3, r4, r5 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_DEVPENPORNC", parametros);

                return dt;
            }
            catch (Exception ex) { throw ex; }
        }

        public Boolean guardarEntregarReparaciones(string strCliente, string strMensaje, string strNumero, List<MEntregarReparaciones> lstReparaciones)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);

                StringWriter swStringWriter = new StringWriter();

                DataTable dt = toolsUtiles.ToDataTable(lstReparaciones);
                dt.TableName = "lstReparaciones";
                dt.WriteXml(swStringWriter);
                string x_lstReparaciones = swStringWriter.ToString();
                swStringWriter = new StringWriter();

                var r1 = new OracleParameter("p_strCliente", OracleDbType.Varchar2, 20, strCliente, ParameterDirection.Input);
                var r2 = new OracleParameter("p_strMensaje", OracleDbType.Varchar2, 200, strMensaje, ParameterDirection.Input);
                var r3 = new OracleParameter("p_strRemision", OracleDbType.Varchar2, 20, strNumero, ParameterDirection.Input);
                var r4 = new OracleParameter("lstReparaciones", OracleDbType.XmlType, x_lstReparaciones, ParameterDirection.Input);
                var r5 = new OracleParameter("p_strResultado", OracleDbType.Varchar2, 200, "", ParameterDirection.Output);
                var r6 = new OracleParameter("p_numResultado", OracleDbType.Int32, ParameterDirection.Output);
                var parametros = new List<OracleParameter> { r1, r2, r3, r4, r5, r6 };
                DataTable dt2 = oc.EjecutarSp<DataTable>("SP_GuardarEntregarReparaciones", parametros);

                return Convert.ToInt32(r6.Value.ToString()) == 1 ? true : false;
            }
            catch (Exception ex) { throw ex; }
        }

        public DataTable consultarResumenReparaciones(string strCliente, DateTime dtmFechaInicial, DateTime dtmFechaFinal, string strTipoReparacion, string strTipoVista)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);

                var r1 = new OracleParameter("pva_tipos", OracleDbType.Varchar2, 40, strTipoReparacion, ParameterDirection.Input);
                var r2 = new OracleParameter("pva_estados", OracleDbType.Varchar2, 20, strTipoVista, ParameterDirection.Input);
                var r3 = new OracleParameter("pdt_desde", OracleDbType.Date, dtmFechaInicial, ParameterDirection.Input);
                var r4 = new OracleParameter("pdt_hasta", OracleDbType.Date, dtmFechaFinal, ParameterDirection.Input);
                var r5 = new OracleParameter("pva_cliente", OracleDbType.Varchar2, 20, strCliente, ParameterDirection.Input);
                var r6 = new OracleParameter("pva_resul", OracleDbType.Varchar2, 200, "", ParameterDirection.Output);
                var r7 = new OracleParameter("pva_errusu", OracleDbType.Varchar2, 200, "", ParameterDirection.Output);
                var r8 = new OracleParameter("p_ResultSet", OracleDbType.RefCursor, ParameterDirection.Output);
                var parametros = new List<OracleParameter> { r1, r2, r3, r4, r5, r6, r7, r8 };
                DataTable dt = oc.EjecutarSp<DataTable>("SP_RESUMENREPP", parametros);

                return dt;
            }
            catch (Exception ex) { throw ex; }
        }

        public Boolean AnularFacturas(string strNroFactura)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);
                string strResultado = "";

                var r1 = new OracleParameter("pva_nrofac", OracleDbType.Varchar2, strNroFactura, ParameterDirection.Input);
                var r2 = new OracleParameter("pva_result", OracleDbType.Varchar2, 200, " ", ParameterDirection.Output);
                var r3 = new OracleParameter("pva_errusu", OracleDbType.Varchar2, 200, " ", ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r1, r2, r3 };
                DataTable dtt = oc.EjecutarSp<DataTable>("SP_ANULARFACP", parametros);

                strResultado = r2.Value.ToString();

                if (strResultado == "S")
                {
                    return true;
                }
                else
                {
                    MessageBox.Show(r3.Value.ToString(), "Error al Anular", MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK);
                    return false;
                }               
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            return false;
        }

        public Boolean crearOrdenesdeServicioyReparacion(string strCliente)
        {
            try
            {
                OracleConexion oc = new OracleConexion(baseDatos);

                var r1 = new OracleParameter("pva_codcli", OracleDbType.Varchar2, 20, strCliente, ParameterDirection.Input);
                var r2 = new OracleParameter("pva_result", OracleDbType.Varchar2, 200, " ", ParameterDirection.Output);
                var r3 = new OracleParameter("pva_errusu", OracleDbType.Varchar2, 200, " ", ParameterDirection.Output);

                var parametros = new List<OracleParameter> { r1, r2, r3 };
                DataTable dtt = oc.EjecutarSp<DataTable>("SP_CREARORDDESSERVYREPARA", parametros);

                return true;
                
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            return false;
        }

        #region Procedimiento para devolver fecha tipo string
            private string PrivStr_RetornarFechaTipoString(string StrFechaAConvetirEnString)
            {
                string strValorARetornar;
                if (String.IsNullOrEmpty(StrFechaAConvetirEnString))
                {
                    strValorARetornar = "";
                }
                else
                {
                    DateTime? DtmFechaAValidar = Convert.ToDateTime(StrFechaAConvetirEnString);
                    if (DtmFechaAValidar == null)
                    {
                        strValorARetornar = "";
                    }
                    else
                    {
                        strValorARetornar = DtmFechaAValidar.Value.ToShortDateString();
                    }
                }
                return strValorARetornar;
            }
        #endregion
    }
}
